【发布时间】: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 秒怎么办?
【问题讨论】:
-
基本上它会在至少
delayMillis毫秒后运行。