(94277247)
在不影响当前Activity使用的情况下在其他线程中处理特定工作 异步消息处理
Handler handler=new Handler()
Runable updateThread=new Runnable(){
public void run(){
handler.postDelayed(updateThread,3000); 在3000毫秒以后再将对象加入消息队列(不一定马上执行)
}
}
在start按钮的onClick方法中有一句
handler.post(updateThread); 在此处第一次将消息队列添加进了队列
在end按钮的onClick方法中
handler.removeCallbacks(updateThread);
将线程从队列中移除
消息队列 将消息添加入队列 然后从头取出一条消息处理
每个Handler都有一个与之关联的消息队列
步骤:
创建Handler对象
调用post方法将要执行的线程对象添加到队列中
将要执行的操作写在线程对象run方法中
在run方法内部执行postDelayed或post方法 使循环
Handler中有2个队列
1个线程队列
1个消息队列
Message msg=updateBarHandler.obtainMessage();
得到一个消息对象
msg有arg1,arg2变量(整型) 可用来简单存值 用这2个成员变量传递消息 优点是系统性能消耗较少
msg.arg1=i;
updateBarHandler.sendMessage(msg); 将msg加入到消息队列中
复写handler中的handleMessage方法(每当调用sendMessage加入消息队列,然后用该方法取出msg对象)
调用结束 removeCallbacks(updateThread) 将线程对象从队列中移除
执行过程:
点按钮 执行onClick中的方法
通过post方法将线程加入到队列中
执行了线程中的run方法
通过obtainMessage获取msg对象 并给msg传值
调用sendMessage(msg)将消息加入消息队列
在handler的handleMessage方法中处理消息,并最后再将线程对象post到线程队列 形成循环
当调用removeCallbacks时 结束队列
---------------------------------------------------------------------------------------