Handler消息机制 笔记
这是笔记,没有源码分析和详细过程,只有自己总结出来的重点,源码分析看参考资料,前辈写的很好。
- 一个线程,一个Looper,一个MessageQueue,多个Handler
- MessageQueue单链表结构
- 使用ThreadLocal机制保证一个线程一个Looper:https://www.cnblogs.com/--here--gold--you--want/p/15730088.html
- 记得在子线程中调用Looper.prepare创建Looper,调用Looper.loop()开始循环,调用Looper.quie()结束循环
- Android主线程的Looper不用prepare,在ActivityThread就已经创建好了。
- 因为Looper.loop()是在子线程中调用,所以Handler的处理逻辑也就在子线程中进行了。
MessageQueue的next方法中,没有消息时,会调用nativePollOnce方法,这是一个natice方法,会调用到linux那边的一些有关线程阻塞之类的,会休眠,不会卡死!!然后有消息进来,在enqueueMessage方法中会调用nativeWake唤醒。
参考资料:
Android开发艺术探索:https://www.kancloud.cn/alex_wsc/android_art/1828638
面试:https://www2.imgeek.org/article/825358871