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(Runnable, long)
Android Studio - 如何从片段中停止 handler.postDelayed?
Android Handler.removeMessage移除所有postDelayed的问题
TimerTask vs Thread.sleep vs Handler postDelayed - 每N毫秒调用一次函数最准确?