handler机制的5个角色
在上一篇android处理耗时任务_ANR中简单的介绍了一个handler的用法,现在我们来看看他的基本原理。
Handler:处理者,负责Message的发送及处理。使用Handler时,需要实现handleMessage(Message msg)方法来对特定的Message进行处理,例如更新UI等。
Message:消息,携带要传送的信息和任务,是handler机制的载体。
MessageQueue:消息队列,用来存放Handler发送过来的消息,并按照FIFO规则执行。存放Message并非实际意义的保存,而是将Message以链表的方式串联起来的,等待Looper的抽取。
Looper:消息泵,不断地从MessageQueue中抽取Message执行。因此,一个MessageQueue需要一个Looper。Thread:线程,负责调度整个消息循环,即消息循环的执行场所。
Looper和MessageQueue一一对应,创建一个Looper的同时会创建一个MessageQueue。而Handler与它们的关系,只是简单的聚集关系,即Handler里会引用当前线程里的特定Looper和MessageQueue。这样说来,多个Handler都可以共享同一Looper和MessageQueue了。当然,这些Handler也就运行在同一个线程里。本人专门画了下面的图,我想这个图已经能够简洁