268

私はhandler.postDelayed()、アプリの次のステージが実行される前に待機期間を作成するために使用しています。待機期間中、プログレスバーとキャンセルボタンのあるダイアログを表示しています。

私の問題は、時間が経過する前にpostDelayedタスクをキャンセルする方法が見つからないことです。

4

7 に答える 7

494

私はこれを実行可能な遅延を投稿するために行います:

myHandler.postDelayed(myRunnable, SPLASH_DISPLAY_LENGTH); 

そしてこれを削除するには:myHandler.removeCallbacks(myRunnable);

于 2010-12-07T15:52:16.897 に答える
69

複数の内部/匿名のランナブルが同じハンドラーに渡されており、同じイベントの使用ですべてをキャンセルしたい場合

handler.removeCallbacksAndMessages(null);

ドキュメントによると、

objがトークンであるコールバックと送信済みメッセージの保留中の投稿をすべて削除します。トークンがnullの場合、すべてのコールバックとメッセージが削除されます。

于 2017-07-30T02:18:36.557 に答える
17

もう1つの方法は、Runnable自体を処理することです。

Runnable r = new Runnable {
    public void run() {
        if (booleanCancelMember != false) {
            //do what you need
        }
    }
}
于 2010-12-07T15:59:14.307 に答える
2

これは非常に簡単です。以下のステートメントを使用するだけで、ハンドラーのすべてのコールバックがキャンセルされRunnableの保留中の投稿がすべて削除されます。

handler.removeCallbacksAndMessages(null);
于 2021-07-27T08:10:21.570 に答える
1

これは、遅延アクションのキャンセルメソッドを提供するクラスです。

public class DelayedAction {

private Handler _handler;
private Runnable _runnable;

/**
 * Constructor
 * @param runnable The runnable
 * @param delay The delay (in milli sec) to wait before running the runnable
 */
public DelayedAction(Runnable runnable, long delay) {
    _handler = new Handler(Looper.getMainLooper());
    _runnable = runnable;
    _handler.postDelayed(_runnable, delay);
}

/**
 * Cancel a runnable
 */
public void cancel() {
    if ( _handler == null || _runnable == null ) {
        return;
    }
    _handler.removeCallbacks(_runnable);
}}
于 2019-02-18T11:45:49.190 に答える
0

ブール値を介してそれを渡すことによって実行可能な遅延された投稿内でCancelCallBacks(this)を呼び出したとき、それは私のために働きました

Runnable runnable = new Runnable(){
    @Override
    public void run() {
        Log.e("HANDLER", "run: Outside Runnable");
        if (IsRecording) {
            Log.e("HANDLER", "run: Runnable");
            handler.postDelayed(this, 2000);
        }else{
            handler.removeCallbacks(this);
        }
    }
};
于 2017-03-22T02:06:24.187 に答える
-1

この要点が役立つことを願っていますhttps://gist.github.com/imammubin/a587192982ff8db221da14d094df6fb4

ハンドラーと実行可能な機能を備えたスクリーンランチャーとしてのMainActivity、Firebaseを使用した基本設定のログインユーザーを使用したログインページまたはフィードページへの実行可能実行。

于 2019-01-12T09:08:24.747 に答える