Handler 组成
一个线程中最多只有一个 Looper , 主线程的 Looper 在应用启动时就会自动创建,而其他线程需要手动调用 Looper.prepare() 和 Looper.loop() 方法创建和启动 Looper。
Android Handler 机制采用了生产者-消费者模式的设计。生产者是 Handler,负责创建和发送消息(Message)到消息队列(MessageQueue)。
消费者是 Looper,它负责从消息队列中取出消息,并将其分发给对应的 Handler 进行处理。
Looper.loop()
queue.enqueueMessage()
MessageQueue 作为一个有序的单链表结构,使用了哨兵节点(mHead)和时间戳(when)来实现快速高效的查询。
queue.next()
nativePollOnce(ptr, nextPollTimeoutMillis) 保证了 Looper.loop() 不会卡死
final long now = SystemClock.uptimeMillis();
SystemClock.uptimeMillis()表示系统开机到当前的时间总数,单位是毫秒,
但是,当系统进入深度睡眠(CPU休眠、屏幕休眠、设备等待外部输入)时间就会停止
MessageQueue 中的时间计算使用 SystemClock.uptimeMillis() ,
Handler 发送消息时也使用 SystemClock.uptimeMillis()