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"