我想知道何时执行 postDelayed(...) 方法,并且消息队列中有许多消息正在等待。在那种情况下,什么时候运行可运行对象?它会在方法中定义的时间过去之后吗?或者它会等到它的角色进入消息队列?或者是什么... ?
问问题
1051 次
1 回答
2
让我们检查源代码和文档:
使 Runnable r 添加到消息队列中,在经过指定的时间后运行。可运行对象将在附加此处理程序的线程上运行。时基是 uptimeMillis()。在深度睡眠中花费的时间会增加执行的额外延迟。
public final boolean postDelayed(Runnable r, long delayMillis) {
return sendMessageDelayed(getPostMessage(r), delayMillis);
}
现在让我们检查一下sendMessageDelayed
:
在之前的所有未决消息之后将消息排入消息队列(当前时间 + delayMillis)。
public final boolean sendMessageDelayed(Message msg, long delayMillis)
{
if (delayMillis < 0) {
delayMillis = 0;
}
return sendMessageAtTime(msg, SystemClock.uptimeMillis() + delayMillis);
}
因此, postDelayed 添加要在所有待处理消息之后但在正常运行时间 + 您放置的延迟之前执行的任务。
检查这个问题以获得更多解释: postDelayed 是否导致消息跳转到队列的前面?
希望它有所帮助。
于 2015-08-05T23:21:37.370 回答