读书人

Mars视频札记Handler

发布时间: 2012-06-30 17:20:13 作者: rapoo

Mars视频笔记——Handler

?

(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时 结束队列

?

---------------------------------------------------

?

读书人网 >移动开发

热点推荐