Handler.postDelayed() 方法中的 delayMillis 参数实际上代表啥?

Posted

技术标签:

【中文标题】Handler.postDelayed() 方法中的 delayMillis 参数实际上代表啥?【英文标题】:What does the delayMillis parameter actually stand for in Handler.postDelayed() method?Handler.postDelayed() 方法中的 delayMillis 参数实际上代表什么? 【发布时间】:2014-10-23 21:24:28 【问题描述】:

Handler.postDelayed(Runnable r, long delayMillis) 的文档说 -

使 Runnable r 被添加到消息队列中,以便运行 经过指定的时间后。

r 将被执行的 Runnable。 delayMillis 执行 Runnable 之前的延迟(以毫秒为单位)。

注意:最后一个词是已执行已添加到消息队列。 Runnable 立即添加到消息队列的末尾。这意味着,执行此 Runnable 的延迟将等于执行消息队列中此 Runnable 前面的消息/runnable 所花费的时间。如何保证两个时间相等?我错过了什么吗?

例如,假设 MessageQueue 当前包含 A、B、C,分别需要 1、1.6、2 秒,handler.postDelayed(R, 4000) 现在将 R 附加到 MessageQueue 的末尾。 A,B,C 将在 4.6 秒内完成,但 R 计划在 4 秒后运行。这怎么可能?如果延迟超过 4.6 秒怎么办?

URL - android Reference page for Handler postDelayed

【问题讨论】:

基本上它会在至少delayMillis毫秒后运行。 【参考方案1】:

这不是确切的延迟。将延迟视为“不早于”。在延迟之后,runnable 有资格执行,但它仅在消息队列已处理任何先前的消息时运行。

道德:确保在处理消息/可运行文件时不会长时间阻塞线程。

【讨论】:

以上是关于Handler.postDelayed() 方法中的 delayMillis 参数实际上代表啥?的主要内容,如果未能解决你的问题,请参考以下文章

取消 handler.postdelayed 进程

Handler的postDelayed(Runnable, long)

停止 handler.postDelayed()

Android Studio - 如何从片段中停止 handler.postDelayed?

Android Handler.removeMessage移除所有postDelayed的问题

TimerTask vs Thread.sleep vs Handler postDelayed - 每N毫秒调用一次函数最准确?