• Android中Handler机制
    • 1.Looper.prepare
      • ThreadLocal
    • 2.Looper.loop
    • 3.Mseeage.target.dispatchMessage

    Android中Handler机制

    1.Looper.prepare

    首先从ThreadLocal中获取一个Looper,如果没有则向ThreadLocal中添加一个new Looper,同时新建一个MessageQueue

    主线程的Looper在ActivityThread创建。

    ThreadLocal

    ThreadLocal是Java提供的用于保存同一进程中不同线程数据的一种机制。每个线程中都保有一个ThreadLocalMap的成员变量,ThreadLocalMap内部采用WeakReference数组保存,数组的key即为ThreadLocal内部的Hash值。

    2.Looper.loop

    循环调用MessageQueue.next获取消息,该函数在MessageQueue中没有消息的时候会阻塞,这里采用了epoll的I/O多路复用机制。当获取到一个消息的时候会返回。

    3.Mseeage.target.dispatchMessage

    在loop中获取到消息后,会调用Message内部的Handler引用并分派事件。