postDelayed是否会导致消息跳到队列的前面?

2023-12-03

我在 Android 文档中查找 postDelayed发布延迟的文档

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

基本上,文档对此方法的描述是 - “导致 Runnable 添加到消息队列,在指定的时间过后运行。runnable 将在用户界面线程上运行。”

我知道每个线程都有一个与其关联的消息队列、循环器和处理程序。 -Android中Looper、Handler、MessageQueue三者之间的关系是什么?。 就“经过指定时间后运行”而言,如果你传入0作为delayMillis的参数,而消息队列中还有消息,那么带0的消息是否会跳过其余消息(即当前在它前面)在消息队列中由looper直接处理?我知道 Looper 会将消息分派到 Handler 的 handleMessage() 方法 - 来自Looper怎么知道要发送消息给Handler呢?。我会自己测试一下,但我真的不知道你会如何去做。


简短的答案是 - 不,做一个postDelayed不会跳到队列中其他非延迟作业的前面。

Both post and postDelayed都打电话sendMessageDelayed, post使用延迟 0。因此,post and postDelayed与零延迟是等效的。 (看Handler source,从第 324 行开始)。sendMessageDelayed表明消息在所有挂起的请求之后放入队列中。原因是每条消息都按照其排队时间加上可选的延迟进行排队。队列按该时间值排序。如果您无延迟地将新消息放入队列,它将跳过(放置在前面)尚未达到传递时间的延迟消息,但不会放在待处理消息(那些已经超过传递时间但尚未到达的消息)前面。发表)

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

postDelayed是否会导致消息跳到队列的前面? 的相关文章

随机推荐