1

メソッド postDelayed(...) がいつ実行され、メッセージ キューで待機中のメッセージが多数あるのかを知りたいです。その場合、ランナブルはいつ実行されますか? メソッドで定義された時間が経過した後ですか?または、その役割がメッセージ キューに入るまで待機しますか? または何... ?

4

1 に答える 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 に答える