メソッド 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 に答える