07. 源码阅读总结
2022年4月15日
07. 源码阅读总结
Message是一个数据类,为链表的存储结构,可以使用obtain()方法获取回收池对象,也有对应的对象回收方法。 Looper中持有ThreadLocal<Looper>
,ThreadLocal set looper对象(Looper.prepare), Looper.loop()循环从MessagerQueue.next()方法取出Message,然后调用Handler.dispatchMessage(msg),将消息发送给Handler。最后回收message到对象回收池。
MessageQueue, 从next()方法开始分析, 从链表尾部取出Message。 其中包含,阻塞消息的native方法。 如果没有Message就无限阻塞等待消息到来。
Handler的存入与处理:enqueueMessage() dispatchMessage()
enqueueMessage() 入队,存入Message;
从队列中获取消息后调用handler.dispatchMessage(), 如果有callback 那么,使用Message.callback回调方法。 如果没有那么必须在子类中实现Handler.handlerMessage方法接收Message。
- 消息入队, 怎么入队的? 怎么入队之后先进先出?
- Handler是如何与当前线程绑定的?