消息机制3

消息机制

main.xml文件代码。

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="${relativePackage}.${activityClass}" >

    <ProgressBar
        android:id="@+id/progressBar1"
        style="?android:attr/progressBarStyle"
        android:visibility="gone"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <ProgressBar
        android:id="@+id/progressBar2"
        style="?android:attr/progressBarStyleHorizontal"
        android:visibility="gone"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <ProgressBar
        android:id="@+id/progressBar3"
        style="?android:attr/progressBarStyleLarge"
        android:visibility="gone"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <ProgressBar
        android:id="@+id/progressBar4"
        style="?android:attr/progressBarStyleSmall"
        android:layout_width="match_parent"
        android:visibility="gone"//让进度条在一开始的时候处于隐藏状态
        android:layout_height="wrap_content" />

    <ProgressBar
        android:id="@+id/progressBar5"
        style="?android:attr/progressBarStyleSmallInverse"
        android:layout_width="match_parent"
        android:visibility="gone"
        android:layout_height="wrap_content" />
    <Button
        android:id="@+id/but"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="显示进度条"
        />
</LinearLayout>

下面先对进度条属性进行以下说明:

1、style="?android:attr/progressBarStyleSmall"代表小号圆形进度条。

2、style="?android:attr/progressBarStyleLarge"代表超大号圆形进度条。

3、style="?android:attr/progressBarStyleHorizontal"代表长形进度条。

MainActivity.java文件内容。

package com.example.inforcontact3;
import android.app.Activity;
import android.content.res.Resources.Theme;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;

public class MainActivity extends Activity {
	//定义事件处理标示
	public static final int CONTINUE = 1;
	public static final int STOP = 2;
	//定义进度条组件
	private ProgressBar bar1, bar2, bar3, bar4, bar5;
	private Button but;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		bar1 = (ProgressBar)findViewById(R.id.progressBar1);
		bar2 = (ProgressBar)findViewById(R.id.progressBar2);
		bar3 = (ProgressBar)findViewById(R.id.progressBar3);
		bar4 = (ProgressBar)findViewById(R.id.progressBar4);
		bar5 = (ProgressBar)findViewById(R.id.progressBar5);
		but = (Button)findViewById(R.id.but);
		but.setOnClickListener(new OnClickListenerImpl());
	}
	private class OnClickListenerImpl implements OnClickListener {

		@Override
		public void onClick(View v) {
			//显示进度条
			bar1.setVisibility(View.VISIBLE);
			bar2.setVisibility(View.VISIBLE);
			bar3.setVisibility(View.VISIBLE);
			bar4.setVisibility(View.VISIBLE);
			bar5.setVisibility(View.VISIBLE);
			//设置进度条的长度
			bar1.setMax(120);
			bar2.setMax(120);
			//设置进度条开始的位置
			bar1.setProgress(0);
			bar2.setProgress(0);
			//创建一个子线程
			new Thread(new Runnable() {
				@Override
				public void run() {
					int count = 0;
					for (int i = 0; i < 10; i++) {
						//让进度快一点
						count = (i + 1) * 20;
						try {
							//设置进度条增加的时间间隔
							Thread.sleep(200);
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
						if (i == 6) {
							//i == 6时隐藏进度条
							Message msg = new Message();
							msg.what = STOP;
							//立即发送信息,并且调用handleMessage()方法处理信息
							MessageHandler.sendMessage(msg);
						} else {
							Message msg = new Message();
							msg.what = CONTINUE;
							msg.arg1 = count;
							MessageHandler.sendMessage(msg);
						}
					}
				}
			}).start();//开启线程
		}
	}
	private Handler MessageHandler = new Handler() {

		@Override
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case STOP:
				bar1.setVisibility(View.GONE);
				bar2.setVisibility(View.GONE);
				bar3.setVisibility(View.GONE);
				bar4.setVisibility(View.GONE);
				bar5.setVisibility(View.GONE);
				//线程中断
				Thread.currentThread().isInterrupted();
				break;
			case CONTINUE:
				//表示当前线程没有中断
				if (!Thread.currentThread().isInterrupted()) {
					bar1.setProgress(msg.arg1);
					bar2.setProgress(msg.arg1);
				}
				break;
			}
		}
	};
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-10 02:11:47

消息机制3的相关文章

利用消息机制实现VC与Delphi之间的通讯(发送自定义消息)

摘要: 本文介绍了使用Windows消息机制实现由不同语言编制的程序之间的相互通讯.联系,并以当前较为流行的两种语言Microsoft Visual C++ 6.0和Borland delphi 5.0为对象,用这两种语言各编制一应用程序,并能很好的通过消息进行交互. 关键字:vc++.delphi.消息 一. 引言 编制较大型的程序往往需要将一个项目分割成若干个模块,由若干个开发小组共同完成.笔者曾参加过几个大型项目的研发工作,根据需要往往要将项目分为解为几大部分,分到三.四家科研单位共同完成

Broadcom的消息机制

在Broadcom中提供了自己的消息机制,有两种消息形式:Request/Response and Event(事件) Request/Response消息:进程之间的通信都是通过smd,所有的消息都是先发送到smd,smd收到信息后,如果消息目的是smd的就做相应的操作,如果不是,就把这个消息route出去 Event messages :对某些事件感兴趣的进程,可以CMS_MSG_REGISTER_EVENT_INTEREST注册此感兴趣事件.事件发生时,将事件信息发送给smd,smd再将事

Android的消息机制之ThreadLocal的工作原理

提到消息机制大家应该都不陌生,在日常开发中不可避免地要涉及到这方面的内容.从开发的角度来说,Handler是Android消息机制的上层接口,这使得开发过程中只需要和Handler交互即可.Handler的使用过程很简单,通过它可以轻松地将一个任务切换到Handler所在的线程中去执行.很多人认为Handler的作用是更新UI,这说的的确没错,但是更新UI仅仅是Handler的一个特殊的使用场景,具体来说是这样的:有时候需要在子线程中进行耗时的IO操作,这可能是读取文件或者访问网络等,当耗时操作

android 进程/线程管理(四)续----消息机制的思考(自定义消息机制)

继续分析handler 和looper 先看看handler的 public void dispatchMessage(Message msg) { if (msg.callback != null) { handleCallback(msg); } else { if (mCallback != null) { if (mCallback.handleMessage(msg)) { return; } } handleMessage(msg); } } 所以消息的处理分层三种,就是 1.传入一

深入Windows内核——C++中的消息机制

<编程思想之消息机制>一文中我们讲了消息的相关概念和消息机制的模拟,本文将进一步聊聊C++中的消息机制. 从简单例子探析核心原理 在讲之前,我们先看一个简单例子:创建一个窗口和两个按钮,用来控制窗口的背景颜色.其效果如下: 图 2 :效果图 Win32Test.h #pragma once #include <windows.h> #include <atltypes.h> #include <tchar.h> //资源ID #define ID_BUTTO

java:从消息机制谈到观察者模式

本文接编程思想之消息机制,读者可以结合编程思想之消息机制一起阅读,也可以直接从本文开始阅读. 从简单的例子开始 同样,我们还是先看一个简单例子:创建一个窗口实现加法的计算功能.其效果如下: 图1: 加法计算 Calculator.java: import javax.swing.*; import javax.swing.border.BevelBorder; import java.awt.*; import java.awt.event.ActionEvent; import java.aw

MFC消息机制

何谓消息.消息处理函数.消息映射?消息简单的说就是指通过输入设备向程序发出指令要执行某个操作.具体的某个操作是你的一系列代码.称为消息处理函数. 在SDK中消息其实非常容易理解,当窗口建立后便会有一个函数(窗口处理函数)开始执行一个消息循环,我们还可以清楚的看到消息处理的脉络.一个switch case语句就可以搞定,消息循环直到遇到WM_QUIT消息才会结束,其余的消息均被拦截后调用相应的处理函数. 但在封装了API的MFC中,消息似乎变的有些复杂了,我们看不到熟悉的switch case语句

(转载)Windows消息机制

文章出处:http://www.cnblogs.com/watsonyin/archive/2005/12/12/295536.html Windows消息机制 Windows操作系统最大的特点就是其图形化的操作界面,其图形化界面是建立在其消息处理机制这个基础之上的.如果不理解Windows消息处理机制,肯定无法深入的理解Windows编程.可惜很多程序员对Windows消息只是略有所闻,对其使用知之甚少,更不了解其内部实现原理,本文试着一步一步向大家披露我理解的Windows消息机制.可以说,

Android Framework 分析---消息机制Native层

在Android的消息机制中,不仅提供了供Application 开发使用的java的消息循环.其实java的机制最终还是靠native来实现的.在native不仅提供一套消息传递和处理的机制,还提供了自定义文件描述符的I/O时间的监听机制.下面我们从具体代码中分析一下. Native层的关键类: Looper.cpp.该类中提供了pollOnce 和wake的休眠和唤醒机制.同时在构造函数中也创建 管道 并加入epoll的机制中,来监听其状态变化. Looper::Looper(bool al

iOS开发系列--通知与消息机制

概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情.iOS中通知机制又叫消息机制,其包括两类:一类是本地通知:另一类是推送通知,也叫远程通知.两种通知在iOS中的表现一致,可以通过横幅或者弹出提醒两种形式告诉用户,并且点击通知可以会打开应用程序,但是实现原理却完全不同.今天就和大家一块去看一下如何在iOS中实现这两种机制,并且在文章后面会补充通知中心的内容避免初学者对两种概念的混淆. 本地通知 推送通