la cancelación de un proceso handler.postdelayed
-
09-10-2019 - |
Pregunta
Estoy utilizando handler.postDelayed()
para crear un período de espera antes de la siguiente etapa de mi aplicación se lleva a cabo. Durante el período de espera estoy mostrando un cuadro de diálogo con la barra de progreso y el botón Cancelar .
Mi problema es que no puedo encontrar una manera de cancelar el postDelayed tarea antes de que transcurra el tiempo.
Solución
Lo hago para enviar un retraso ejecutable:
myHandler.postDelayed(myRunnable, SPLASH_DISPLAY_LENGTH);
Y esto para eliminarla: myHandler.removeCallbacks(myRunnable);
Otros consejos
En caso de que tiene varios runnables interiores / anónimos pasados ??al mismo manejador, y desea cancelar todos a la misma utilización evento
handler.removeCallbacksAndMessages(null);
De acuerdo con la documentación,
Eliminar cualquier mensajes pendientes de devoluciones de llamada y mensajes enviados cuyo obj es simbólico. Si token es nula, se eliminarán todas las devoluciones de llamada y mensajes.
Otra forma es manejar la propia Ejecutable:
Runnable r = new Runnable {
public void run() {
if (booleanCancelMember != false) {
//do what you need
}
}
}
A mí me funcionó cuando llamé CancelCallBacks (este) dentro del poste retrasó 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);
}
}
};
Esta es una clase que proporciona un método para cancelar una acción retardada
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);
}}
Espero que esto ayuda GIST https://gist.github.com/imammubin/a587192982ff8db221da14d094df6fb4
MainActivity como Screen Launcher con controlador y función ejecutable, la carrera Ejecutable a la página de inicio de sesión o la página de alimentación con preferencia de los usuarios de base de inicio de sesión con firebase.