首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

Handler对象的Message运用

2012-08-25 
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?
  1. package?com.lyg.progressbarhandler;??
  2. ??
  3. import?android.app.Activity;??
  4. import?android.os.Bundle;??
  5. import?android.os.Handler;??
  6. import?android.os.Message;??
  7. import?android.util.Log;??
  8. import?android.view.View;??
  9. import?android.view.View.OnClickListener;??
  10. import?android.view.Window;??
  11. import?android.view.WindowManager;??
  12. import?android.widget.Button;??
  13. import?android.widget.ProgressBar;??
  14. ??
  15. public?class?progressBarHandler?extends?Activity?{??
  16. ????/**?Called?when?the?activity?is?first?created.?*/??
  17. ????/*?自定义Handler信息代码,作为标识事件处理?*/??
  18. ????protected?static?final?int?STOP_NOTIFIER?=?0x108;//停止标识??
  19. ????protected?static?final?int?RUNNING_NOTIFIER?=?0x109;//运行标识??
  20. ??
  21. ????private?Button?bnStart;??
  22. ????private?ProgressBar?progBar;??
  23. ??????
  24. ????@Override??
  25. ????public?void?onCreate(Bundle?savedInstanceState)?{??
  26. ????????super.onCreate(savedInstanceState);??
  27. ??????????
  28. ????????//全屏显示??
  29. ????????//?注:以下两行不可放在setContentView之后,否则报错。??
  30. ????????requestWindowFeature(Window.FEATURE_NO_TITLE);??
  31. ????????getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,??
  32. ????????????????WindowManager.LayoutParams.FLAG_FULLSCREEN);??
  33. ??
  34. ????????setContentView(R.layout.main);??
  35. ??
  36. ????????progBar?=?(ProgressBar)?findViewById(R.id.progressbar);??
  37. ????????bnStart?=?(Button)?findViewById(R.id.bnstart);??
  38. ????????bnStart.setOnClickListener(new?bnStartOnClickListener());??
  39. ??
  40. ????????//?初始化进度条控件??
  41. ????????progBar.setProgress(0);??
  42. ??
  43. ????}??
  44. ??????
  45. ????class?bnStartOnClickListener?implements?OnClickListener{??
  46. ??
  47. ????????@Override??
  48. ????????public?void?onClick(View?arg0)?{??
  49. ????????????//?TODO?Auto-generated?method?stub??
  50. ????????????//线程调用跟踪??
  51. ????????????Log.d("lyg",?"onClick-->id="+Thread.currentThread().getId()+"?name="+Thread.currentThread().getName());??
  52. ??????????????
  53. ????????????progBar.setProgress(0);//设置进度控件当前进度为0??
  54. ??????????????
  55. ????????????//将线程对象runable放到消息队列中??
  56. ????????????handler.post(runable);??
  57. ????????}??
  58. ????}??
  59. ??????
  60. ????//Handler构建之后,会监听传来的消息??
  61. ????Handler?handler=new?Handler(){??
  62. ????????@Override??
  63. ????????public?void?handleMessage(Message?msg)?{??
  64. ????????????//?TODO?Auto-generated?method?stub??
  65. ????????????super.handleMessage(msg);??
  66. ????????????System.out.println("Handler?handleMessage");??
  67. ????????????switch(msg.what)??
  68. ????????????{??
  69. ????????????????case?STOP_NOTIFIER:??
  70. ????????????????{??
  71. ????????????????????progBar.setProgress(msg.arg1);//设置进度控件的当前进度为msg.arg1??
  72. ????????????????????handler.removeCallbacks(runable);//清除队列中的未执行的runable??
  73. ????????????????}??
  74. ????????????????break;??
  75. ????????????????case?RUNNING_NOTIFIER:??
  76. ????????????????{??
  77. ????????????????????progBar.setProgress(msg.arg1);//设置进度控件的当前进度为msg.arg1li

热点排行