Skip to content Skip to sidebar Skip to footer

Restart A Handler.postdelayed In Java

@Override public void onUserInteraction() { Handler handler = new Handler(); handler.postDelayed(new Runnable () { public void run() { finish();

Solution 1:

You can use a boolean object, example:

@OverridepublicvoidonUserInteraction() {
    isStarted = true;
    Handler handler = newHandler();
    handler.postDelayed(newRunnable () {
        publicvoidrun() {
          if(isStarted){
            finish();
            }
         }
    }, 5000);

}

or you can make something like this:

Runnable myRunnable = newRunnable() {
    @Overridepublicvoidrun() {
        finish();
    }
};

publicstaticHandler myHandler = newHandler();
privatestatic final int TIME_TO_WAIT = 5000;

@OverridepublicvoidonUserInteraction() {
    restart();
}

publicvoidstart() {
    myHandler.postDelayed(myRunnable, TIME_TO_WAIT);
}

publicvoidstop() {
    myHandler.removeCallbacks(myRunnable);
}

publicvoidrestart() {
    myHandler.removeCallbacks(myRunnable);
    myHandler.postDelayed(myRunnable, TIME_TO_WAIT);
}

Solution 2:

Store the runnable and handler in a field and reuse them

Handler handler;
Runnable runnable = newRunnable () {
    publicvoidrun() {
        finish();
    }
};

@OverrideprotectedvoidonCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    handler = newHandler();
    handler.postDelayed(runnable, 5000);
}

@OverridepublicvoidonUserInteraction() {
    handler.removeCallbacks(null);
    handler.postDelayed(runnable, 5000);
}

Solution 3:

Create a handler and keep its reference as global variable

privateRunnable runnable;
privateHandler newHandler;

newHandler = newHandler();
runnable = newRunnable() {
    @Overridepublicvoidrun() {
        try {
            //update UI
            newHandler.postDelayed(runnable,100);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
};
newHandler.post(runnable);

And on user Interaction

@Override
public void onUserInteraction() {
    super.onUserInteraction();
   newHandler.removeCallbacks(runnable);
    //Do some taskif(//task done){
     newHandler.postDelayed(runnable,100);
     }
}

Solution 4:

It was not work for me until I used Handler's removeCallbacksAndMessages(Object token) method.

On kotlin

privatevar restartingHandler = Handler()
privatevar runnable: () -> Unit = {}

funstart() {
    restartingHandler.postDelayed(runnable, 5000L)
}

funrestart() {
    restartingHandler.removeCallbacks(runnable)
    restartingHandler.removeCallbacksAndMessages(null)

    restartingHandler.postDelayed(runnable, 5000L)
}

funstop() {
    restartingHandler.removeCallbacks(runnable)
    restartingHandler.removeCallbacksAndMessages(null)
}

Post a Comment for "Restart A Handler.postdelayed In Java"