android - studio - cancelando un proceso handler.postdelayed
handler thread android example (4)
Estoy usando handler.postDelayed()
para crear un período de espera antes de que tenga lugar la siguiente etapa de mi aplicación. Durante el período de espera, estoy mostrando un diálogo con la barra de progreso y el botón de cancelar .
Mi problema es que no puedo encontrar una manera de cancelar la tarea posterior a la demora antes de que transcurra el tiempo.
En caso de que tenga varias secuencias internas / anónimas pasadas al mismo controlador, y desee cancelarlas todas al mismo tiempo de uso
handler.removeCallbacksAndMessages(null);
Según la documentación,
Elimine cualquier publicación pendiente de devoluciones de llamada y mensajes enviados cuyo objeto sea token. Si el token es nulo, se eliminarán todas las devoluciones de llamada y los mensajes.
Funcionó para mí cuando llamé a CancelCallBacks (this) dentro del post retrasado ejecutable entregándolo a través de un booleano
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);
}
}
};
Hago esto para publicar un runnable retrasado:
myHandler.postDelayed(myRunnable, SPLASH_DISPLAY_LENGTH);
Y esto para eliminarlo: myHandler.removeCallbacks(myRunnable);
Otra forma es manejar el propio Runnable:
Runnable r = new Runnable {
public void run() {
if (booleanCancelMember != false) {
//do what you need
}
}
}