一、IntentService消息分发过程:
1、创建线程
2、在线程开始运行的时候,通过Looper.prepare() 创建消息队列。中间涉及到ThreadLocal,保证了该线程只能有一个Looper和一个消息队列。
3、然后Looper.loop(); 开始了无限循环模式,不断从MessageQueue中获取消息,然后调用Message的target 的dispatchMessage 处理消息。MessageQueue也在不断的循环等待来新的消息,才会返回到Looper中。
4、Message创建,可以从缓存中获取已经处理的消息,或者创建新的对象
5、Handle 发送Message, 赋予Message的target值。 并且调用MessageQueue 的enqueueMessage 方法,按照Message.when顺序插入到队列之中。等待MessageQueue的next中无限循环获取。
6、Looper.loop() 这个无限循环终于拿到了MessageQueue 返回的Message了, 调用Message.target.dispatchmessage方法, 也就是Handle的dispatchmessage 开始处理消息。
7、消息处理完成,Message.recycleUnchecked 放入缓存池,等待下次使用。
网友评论