主线程循环器如何处理UI事件消息?

时间:2014-03-17 16:19:44

标签: android multithreading events user-interface message-queue

UI事件是否作为标准消息发布到主线程消息队列的末尾?它们是否使用sendMessageAtFrontOfQueue发布到队列的前面?或者他们是以其他方式发布的?

如果这个问题重复,请原谅。

2 个答案:

答案 0 :(得分:0)

他们将被发布到最后,或者您最终会遇到永远不会处理消息的饥饿情况。

答案 1 :(得分:0)

两条非延迟消息(使用post(Runnable r)发布的消息)和延迟消息(使用postDelayed(Runnable r,long delayMillis)发布的消息)都附加到队列的末尾。但是,您必须了解即使是未延迟的消息也有隐含的零延迟。换句话说,队列中的每条消息都有一个与之关联的“传递时间”。此“传递时间”决定从队列中选择消息的顺序。因此,对于例如如果您的队列当前有一条显式延迟为3000毫秒的消息,并且您在没有任何明确延迟的情况下将另一条消息排入队列,则此新添加的消息将跳过第一条消息以首先执行。就sendMessageAtFrontOfQueue而言,您可以谨慎地根据您的要求使用它,否则它很容易使消息队列饿死,导致排序问题或产生其他意外的副作用。