interview

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引用并分派事件。