参考:Android异步通信:手把手带你深入分析 Handler机制源码
1.定义
一套Android消息传递机制/异步通信机制
2.作用
在多线程应用场景中,将工作线程中需更新UI的操作信息传递到UI主线程,从而实现工作线程对UI的更新处理,最终实现异步消息的处理。
3.意义
多个线程并发更新UI的同时,保证线程安全
4.组成
1.Looper:循环器,消息队列与处理者的通信媒介
作用:循环取出消息队列的消息,然后发送给对应的处理者handler.
2.Handler:处理者,主线程与子线程的通信媒介
作用:添加消息到消息队列,处理循环器分派的消息。
3.Message:消息,线程间通讯的数据单元
作用:存储需要操作的通讯信息
4.MessageQueue:一种数据结构,先进先出
作用:存储handler发送过来的消息。
*Looper,MessageQueue均属于主线程。MessageQueue在Looper构造函数中创建。
*当创建handler时,通过构造方法自动关联当前线程的Looper对象和对应的消息队列对象,从而自动绑定了实现创建handler对象操作的线程。
5.流程
首先在主线程中创建Handler对象,然后在工作线程中创建Message对象,通过handler将message对象发送到MessageQueue对象中,然后由主线程创建的Looper对象循环取出MessageQueue中的message后调用handler.dispatchMessage()方法进行消息分派,在该方法中判断message.callback属性是否为空,如不为空,代表使用post()方法发送消息,则直接回调Runnable对象复写的run()方法进行消息处理,如果为空,代表使用sendMessage()发送消息,则回调复写的handleMessage()进行消息处理。