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引用并分派事件。
当前内容版权归 Hayden Yang 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 Hayden Yang .