handler如何实现定时处理消息

System.currentTimeMillis    SystemClock.uptimeMillis   SystemClock.elapsedRealtime

Thread.sleep  SystemClock.sleep  Thread.sleep()、Object.wait()、System.nanoTime()  等都是使用 SystemClock.uptimeMillis。  

SystemClock.elapsedRealtime 用于计时等。


handler 把message放入messagequeue,MessageQueue是一个单行链表,根据when进行插入。

链表头时间段,链表尾时间长。

handler sendmessage  时 message.when = SystemClock.uptimeMillis + delayMillis

looper遍历messageQuere,会对比 when,如果不可执行,调用 nativePollOnce进行阻塞;

如果这时候有新的message插入messageQueue,会调用  nativeWake 进行激活。

nativePollOnce 表示所有可执行消息已完毕,等待下一条可执行消息。

你可能感兴趣的:(handler如何实现定时处理消息)