美文网首页
Handler源码详解

Handler源码详解

作者: yayou | 来源:发表于2018-01-11 18:47 被阅读0次

    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处理掉

    相关文章

      网友评论

          本文标题:Handler源码详解

          本文链接:https://www.haomeiwen.com/subject/hwjtoxtx.html