Handler源码详解

Handler - 消息的发送者和最终消费者

首先:Handler的初始化、需要重写 handleMessage()方、而该方法就是最终的消费的地方

然后:Handler发送消息的方法,所有的sendMessage和post方法最终都是调用个sendMessageAtTime()方法再调用enqueueMessage()方法

                                最后是调用的是 mQueue.enqueueMessage()


handler的初始化

可以看出 handler 中的Looper和mQueue 是 Looper.myLooper()方法获得的

获取mLooper对象
sTheradLocal的初始化方法

prepare初始化sThreadLocal、而prepare参数是在线程初始化的时候需要调用

ui线程初始化

而MessageQueue的enqueueMessage()方法 最主要的作用则是将所有Message以一种链表结构串起来。

MessageQueue.enqueueMessage()将message串起来

最后再回到Looper类。ui线程的初始化中都会在最后调用Looper.loop() 来看一下这个方法

loop( ) 实际就是开启了一个死循环、不停的从MessageQueue中拿出message执行 

那么最终执行者就是Message对象中target属性的dispatchMessage方法


Message. target 就是一开始 发消息的handler


发现没有这个就是我们重写的方法

最后发现调用我们重写的方法。

总结: 

    Handler - 消息的发送者和最终消费者

    Message - 消息、所有的数据

    MessageQueue - 将消息串起来。供Looper调用

    Looper -  循环调用MessageQueue的消息链、交与message中的handler处理掉

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

推荐阅读更多精彩内容