postDelayed会导致消息跳转到队列的前面吗?

我在Android文档上寻找postDelayed 后延迟文档

这类似于另一个问题 – https://stackoverflow.com/questions/25820528/is-postdelayed-relative-to-when-message-gets-on-the-queue-or-when-its-the-actual – I过了一会儿,但情况不同(在我的脑海中措辞更清晰)

基本上是文档为此方法所说的内容 – “使Runnable被添加到消息队列中,在指定的时间量过后运行。可运行的操作将在用户界面线程上运行。”

我知道每个线程都有一个消息队列,looper和与之关联的处理程序。 – Android中的Looper,Handler和MessageQueue之间有什么关系? 。 就“在指定的时间量过去之后运行”而言,如果传入0作为delayMillis的参数并且消息队列中仍有消息,则消息0将跳过其余消息(目前在它的前面)在消息队列中直接由looper处理? 我知道looper会将消息发送到Handler的handleMessage()方法 – 来自Looper如何知道将消息发送给Handler? 。 我会自己测试一下,但我真的不知道你会怎么做。

简短的回答是 – 不,做postDelayed不会跳到队列中其他未延迟的作业。

postpostDelayed都调用sendMessageDelayedpost使用延迟0.因此, postpostDelayed与零延迟是等价的。 (参见第324行开始的Handler源 )。 sendMessageDelayed表示在所有挂起请求之后将消息放入队列中。 原因是每条消息都排队入队时加上可选的延迟。 队列按此时间值排序。 如果您在没有延迟的情况下排队新邮件,它将跳过(放在前面)仍然没有达到交付时间的延迟邮件,但不会在待处理邮件之前(那些超过其交付时间但尚未到达的邮件)交付)

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