6

Android Handlerクラスには、次のメソッドが含まれています。

public final boolean postAtTime (Runnable r, Object token, long uptimeMillis)

特定の時間に Runnable を投稿します。このメソッドのおかげで、token後でコールバックをメッセージ キューから削除するために使用できます。r

public final void removeCallbacks (Runnable r, Object token)

次のメソッドはHandler クラスに存在しません

public final boolean postDelayed (Runnable r, Object token, long delay)

そのようなメソッドを提供しない正当な理由はありますか?

4

4 に答える 4

5

ソースコードを見た後、トークンオブジェクトは最終的にメッセージに渡されます。

public final boolean postAtTime(Runnable r, Object token, long uptimeMillis)
308    {
309        return sendMessageAtTime(getPostMessage(r, token), uptimeMillis);
310    }

private static Message getPostMessage(Runnable r, Object token) {
608        Message m = Message.obtain();
609        m.obj = token;

そしてpostDelay

 public final boolean postDelayed(Runnable r, long delayMillis)
330    {
331        return sendMessageDelayed(getPostMessage(r), delayMillis);
332    }

あなたが望むものが

public final boolean postDelayed (Runnable r, Object token, long delay)

それなら、なぜただ使ってみませんか

public final boolean postAtTime (Runnable r, Object token, long uptimeMillis)

同じなので。

更新、これを追加するのを忘れた:

public final boolean sendMessageDelayed(Message msg, long delayMillis)
442    {
443        if (delayMillis < 0) {
444            delayMillis = 0;
445        }
446        return sendMessageAtTime(msg, SystemClock.uptimeMillis() + delayMillis);
447    }
于 2013-02-04T16:08:23.133 に答える
2

Handler ソースを見ると、次のように見えます。

private final Message getPostMessage(Runnable r, Object token) {
    Message m = Message.obtain();
    m.obj = token;
    m.callback = r;
    return m;
}

あなたが望むもののためにコピーすることができます: を呼び出す代わりに、そのpostDelayedようなメッセージでランナブルをラップします

sendMessageDelayed(getPostMessage(r, token), delayMillis);

removeCallbacks()次に、トークンをパラメーターとして使用できます

于 2013-02-04T16:33:08.717 に答える
0

postDelayed ランナブル r をハンドラー H から削除するには、H.removeCallbacks(r) を呼び出すだけです。なぜトークンが必要なのですか?

于 2013-02-04T15:41:57.190 に答える