Handler对象的Message运用
Handler对象的Message应用知识点???? 接受子线程发送的消息数据,并用此消息数据配合主线程更新UI。???? 根
Handler对象的Message应用
知识点
???? 接受子线程发送的消息数据,并用此消息数据配合主线程更新UI。
???? 根据消息数据中的标识msg.what,分类处理相应的操作。
?
范例程序
??? 为了让线程对象Runnable运行过程中,可以不断地将信息往Activity传递,所以用了Android.os.Handler对象及Android.os.Message对象,且在类成员变量中声明了两个整数:STOP_NOTIFIER与RUNNING_NOTIFIER,这两个整数将作为信息传递出来时的信号标识,前者为线程对象Runnable需要喊停的标识,后者为线程对象Runnable正在运行的标识。
??? 本范例中,摆放一个按钮和一个进度条控件。按钮用于复位参数和启动线程对象Runnable。
具体代码如下:
?
view plaincopy to clipboardprint?
- package?com.lyg.progressbarhandler;??
- ??
- import?android.app.Activity;??
- import?android.os.Bundle;??
- import?android.os.Handler;??
- import?android.os.Message;??
- import?android.util.Log;??
- import?android.view.View;??
- import?android.view.View.OnClickListener;??
- import?android.view.Window;??
- import?android.view.WindowManager;??
- import?android.widget.Button;??
- import?android.widget.ProgressBar;??
- ??
- public?class?progressBarHandler?extends?Activity?{??
- ????/**?Called?when?the?activity?is?first?created.?*/??
- ????/*?自定义Handler信息代码,作为标识事件处理?*/??
- ????protected?static?final?int?STOP_NOTIFIER?=?0x108;//停止标识??
- ????protected?static?final?int?RUNNING_NOTIFIER?=?0x109;//运行标识??
- ??
- ????private?Button?bnStart;??
- ????private?ProgressBar?progBar;??
- ??????
- ????@Override??
- ????public?void?onCreate(Bundle?savedInstanceState)?{??
- ????????super.onCreate(savedInstanceState);??
- ??????????
- ????????//全屏显示??
- ????????//?注:以下两行不可放在setContentView之后,否则报错。??
- ????????requestWindowFeature(Window.FEATURE_NO_TITLE);??
- ????????getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,??
- ????????????????WindowManager.LayoutParams.FLAG_FULLSCREEN);??
- ??
- ????????setContentView(R.layout.main);??
- ??
- ????????progBar?=?(ProgressBar)?findViewById(R.id.progressbar);??
- ????????bnStart?=?(Button)?findViewById(R.id.bnstart);??
- ????????bnStart.setOnClickListener(new?bnStartOnClickListener());??
- ??
- ????????//?初始化进度条控件??
- ????????progBar.setProgress(0);??
- ??
- ????}??
- ??????
- ????class?bnStartOnClickListener?implements?OnClickListener{??
- ??
- ????????@Override??
- ????????public?void?onClick(View?arg0)?{??
- ????????????//?TODO?Auto-generated?method?stub??
- ????????????//线程调用跟踪??
- ????????????Log.d("lyg",?"onClick-->id="+Thread.currentThread().getId()+"?name="+Thread.currentThread().getName());??
- ??????????????
- ????????????progBar.setProgress(0);//设置进度控件当前进度为0??
- ??????????????
- ????????????//将线程对象runable放到消息队列中??
- ????????????handler.post(runable);??
- ????????}??
- ????}??
- ??????
- ????//Handler构建之后,会监听传来的消息??
- ????Handler?handler=new?Handler(){??
- ????????@Override??
- ????????public?void?handleMessage(Message?msg)?{??
- ????????????//?TODO?Auto-generated?method?stub??
- ????????????super.handleMessage(msg);??
- ????????????System.out.println("Handler?handleMessage");??
- ????????????switch(msg.what)??
- ????????????{??
- ????????????????case?STOP_NOTIFIER:??
- ????????????????{??
- ????????????????????progBar.setProgress(msg.arg1);//设置进度控件的当前进度为msg.arg1??
- ????????????????????handler.removeCallbacks(runable);//清除队列中的未执行的runable??
- ????????????????}??
- ????????????????break;??
- ????????????????case?RUNNING_NOTIFIER:??
- ????????????????{??
- ????????????????????progBar.setProgress(msg.arg1);//设置进度控件的当前进度为msg.arg1li