Handler是一套Android的消息机制,用于线程中的通讯。
用最简单的话描述: handler其实就是主线程在起了一个子线程,子线程运行并生成Message,Looper在主线程中轮询MessageQueue并传递给Handler,Handler逐个获取子线程中的Message.
它主要通过4个组件来来完成
Looper
它是一种循环机制,负责在一个线程中不断的轮询MessageQueue,在UI线程外都需要手动创建Looper
MessageQueue
它是一个消息列队,用于储存和管理消息,每一个Looper都有一个对应的MessageQueue。
Handler
是一个用于发送和处理消息的工具,主要用于不同线程之间传递和处理消息,它可与目标线程绑定,Handler收到消息后会放入与之绑定的Looper的MessageQueue中。
Message
一个包含了数据和操作的对象,用于在不同的线程中传递消息。
注意事项
通常Handle是用匿名内部类来实现,所以会隐式持有外部类引用,常常会引发内存泄漏,我们可以使用静态内部类和弱引用的方式避免这种情况的发生。
当MessageQueue中没有消息时,Looper会使线程处于wait的状态
当MessageQueue中有消息,但是未到达时,Looper处于等待状态,当被唤醒时,则重新检查MessageQueue。