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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top