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

 

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

 

你可能感兴趣的:(android,handler)