Handler.postDelayed(Runnable r,long delayMillis)的文档说 -
使Runnable r添加到要运行的消息队列中 经过指定的时间后。
r 将要执行的Runnable。 delayMillis 执行Runnable之前的延迟(以毫秒为单位)。
注意:最后一个字是已执行,不 已添加到消息队列。 Runnable立即添加到消息队列的末尾。这意味着,执行此Runnable的延迟将等于在消息队列中执行此Runnable前面的消息/ runnable所花费的时间。如何确保两个时代都相等?我错过了什么吗?
例如,假设MessageQueue当前包含分别为1,1.6,2秒的A,B,C,并且handler.postDelayed(R,4000)现在在MessageQueue的末尾附加R. A,B,C将在4.6秒内完成,但R计划在4秒后运行。这怎么可能?如果延迟超过4.6秒怎么办?
答案 0 :(得分:2)
这不是一个确切的延迟。将延迟视为"不早于"。延迟之后,runnable有资格执行,但只有在消息队列处理完任何先前消息时才会运行。
道德:确保你处理你的消息/ runnables而不会在很长一段时间内阻塞线程。