1、
2、
3、
4、
handler.send()或者handler.post()的方案,是发送消息,并添加到消息队列里面来。在app启动的时候,主线程的loop已经在滚动了,滚动的时候带着messagequeue不停地轮询,当通过handler发送消息的时候,会将消息放入已经在轮询的消息队列中去。然后在messagequeue里面,轮询调用next(),调用next()函数把消息分发出去。
5、
sendMessage()最终调用的都是enqueueMessage()方法,所以需要看MessageQueue中的enqueueMessage()方法
6、
循环遍历消息,比较消息的时间,如果时间比当前时间小的话,则说明找到了消息,跳出循环,将消息发送出去
7、
8、
handler的数据结构
里面包含了Looper和MessageQueue,看源码,首先看构造函数。看一个类,一定要看构造函数。
9、handler中有很多构造函数,但是最终调用的只有这一个构造函数
10、
11、
12、