handler+Message+MessageQueue+Looper

1.handler消息处理器,负责处理消息

2.Message消息,包含消息id、被处理的对象

3.MessageQueue消息队列,存放handler发送的Message

4.Looper消息泵,不间断的从MessageQueue中抽取消息

简单比喻:Looper是水泵,Message是水,MessageQueue是水池,handler是操作的人。

Handler机制的大致流程:

1.在Looper.loop()方法运行开始后,循环的按照接收顺序取出MessageQueue里面的非NULL的Message。

2.一开始MessageQueue里面的Message都是NULL的,当Handler.sendMessage(Message)到MessageQueue,该函数里面设置了那个Message对象的target属性是当前Handler对象。随后Looper取出了那个Message,则调用该Message的target指向的Handler的dispatchMessage函数对Message进行处理。在dispatchMessage方法里,如何处理Message则由用户指定,三个判断,优先级从高到低:

1)Message里面的Callback,一个实现了Runnable接口的对象,其中run函数做处理工作

2)Handler里面的mCallback指向的一个实现了Callback接口的对象,由其handleMessage进行处理。

3)处理消息Handler对象对应的类继承并实现了其中handleMessage函数,通过这个实现的handleMessage函数处理消息。

4)Handler处理完该Message后,Looper则设置该Message为NULL,以便回收。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容