MessageQueue,以队列的形式管理message,message先进先出,但其内部是采用单链表来存储消息列表。
post(Runnable r)、postDelayed(Runnabler, long delayMillis)、sendMessage(Message msg)、sendMessageDelayed(Message msg, long delayMillis)最终调用的都是sendMessageAtTime(Message msg, long uptimeMillis),其中又调用了enqueueMessage()将msg插入队列中。即不管发送的消息有没有延迟,都会先插入队列中,如果有延迟的话,looper不会立刻取出消息,时间到后才会取出消息,也就是延迟指延迟处理,不是延迟发送。
Handler可以调用sendMessageAtFrontOfQueue(Messagemsg),postAtFrontOfQueue(Runnable r),将消息插入队头,最先取出,最先执行,之后再处理队列中的其他消息。
如果队列中只有延迟消息,此时发送一个普通消息,普通消息会插入队头,最先处理,而不会等延迟消息取出后,再取出普通消息。
参考:
http://www.tuicool.com/articles/nqeIVj