postDelay是否会导致消息跳转到队列的前面



我在Android文档中寻找postDelay。延迟发布文档

这类似于另一个问题 - https://stackoverflow.com/questions/25820528/is-postdelayed-relative-to-when-message-gets-on-the-queue-or-when-its-the-actual - 我有一段时间了,但这是一个不同的情况(并且在我的脑海中措辞更清晰(

基本上,这是文档对此方法的说法 - "导致将 Runnable 添加到消息队列中,在指定的时间经过后运行。可运行的将在用户界面线程上运行。

我知道每个线程都有一个与之关联的消息队列、循环器和处理程序。 - Android中的Looper,Handler和MessageQueue之间的关系是什么?就"在指定的时间过后运行"而言,如果传入 0 作为 delayMillis 的参数,并且消息队列中仍有消息,那么 0 的消息是否会跳过消息队列中的其余消息(当前在其前面(由循环器直接处理?我知道 looper 会将消息调度到处理程序的 handleMessage(( 方法 - 来自 Looper 如何知道将消息发送到处理程序?。我会自己测试这个,但我真的不知道你会怎么做。

简短的回答是 - 不,执行postDelayed不会跳到队列中其他非延迟作业的前面。

postpostDelayed都调用sendMessageDelayedpost使用延迟0。 因此,具有零延迟的postpostDelayed是等效的。 (请参阅Handler来源,从第 324 行开始(。 sendMessageDelayed声明消息在所有挂起的请求之后放入队列中。 原因是每条消息都按排队时间加上可选的延迟排队。 队列按此时间值排序。如果您将新邮件排队没有延迟,它将跳过(放在(仍未到达其传递时间的延迟消息前面,但不在待处理消息(已超过其传递时间但尚未传递的消息(前面

作为旁注,如果您希望请求跳过挂起请求的行为,您可以使用 postAtFrontOfQueue ,但请务必阅读并理解仅在特殊情况下使用的警告。

最新更新