一、消息机制的工作步骤
Handler的工作流程分为四个步骤异步通信准备、消息发送、消息循环、消息处理:
1.异步通信准备:在主线程中创建处理器对象、消息队列对象、Handler对象,Looper和MessageQueue均属于主线程,在创建MessageQueue后Looper自动进入消息循环,此时Handler自动绑定主线程的Looper、MessageQuene,并且启动子线程
2.消息入队:工作子线程通过Handler发送消息Message到消息队列MessageQueue中,该消息内容就是工作线程对UI的操作
3.消息循环:Looper会一直遍历绑定的消息队列,在消息循环过程中,若消息队列为空则线程阻塞,当队列不为空时,由Lopper逐个取出消息队列中的消息,并分发给创建该消息的Handler。
4.消息处理:处理者Handler接受Looper发送过来的消息并根据消息进行UI操作
二、Handler使用过程
Handler的使用方式因发送消息Message到消息队列MessageQueue的方式不同而不同,一共分为使用Handler.sendMessage()和使用Handler.post()两种方式:
方式1:使用Handler.sendMessage(),在该方式中又分为新建Handler子类和匿名Handler子类两种:
1.新建Handler子类
(1)自定义Handler子类,继承Handler,重写handlerMessage方法从而确定更新UI的操作,即需要执行的UI操作,根据不同线程发过来的消息执行不同的操作,可以根据Message的what属性标示不同的信息
class mHandler extends Handler {
// 通过复写handlerMessage() 从而确定更新UI的操作
@Override
public void handleMessage(Message msg) {
...// 需执行的