para - manual de programacion android pdf
Reprogramar el temporizador en Android (4)
De hecho, si observa el método cancelar javadoc , puede ver lo siguiente:
No interfiere con una tarea que se está ejecutando actualmente (si existe).
Eso le dice al temporizador "ok, no hay más tareas ahora, pero puedes terminar el que estás haciendo". Creo que también deberás cancelar TimerTask .
¿Cómo puedo reprogramar un temporizador? Intenté cancelar el temporizador / registro horario y programarlo de nuevo con un método. Pero muestra un error de excepción:
Exception errorjava.lang.IllegalStateException: TimerTask is scheduled already
Código lo he usado:
private Timer timer = new Timer("alertTimer",true); public void reScheduleTimer(int duration) { timer.cancel(); timer.schedule(timerTask, 1000L, duration * 1000L); }
En realidad, puedes usar purge()
para que no tengas que inicializar un nuevo Timer
.
public int purge ()
Agregado en el nivel 1 de la API. Elimina todas las tareas canceladas de la cola de tareas. Si no hay otras referencias en las tareas, luego de esta llamada son libres de ser recolectados.
Devuelve el número de tareas canceladas que se eliminaron de la cola de tareas.
La respuesta de @Eric Nordvik está funcionando bien.
Una cosa que podemos hacer es cancelar la ejecución de eventos del temporizador anterior
public void reScheduleTimer(int duration) {
// Cancel previous timer first
timer.cancel();
timer = new Timer("alertTimer",true);
timerTask = new MyTimerTask();
timer.schedule(timerTask, 1000L, duration * 1000L);
}
Si ve la documentación en Timer.cancel () verá esto:
"Cancela el temporizador y todas las tareas programadas. Si hay una tarea en ejecución, no se ve afectada. No se pueden programar más tareas en este temporizador. Las llamadas posteriores no hacen nada".
Tendrá que inicializar un nuevo temporizador cuando esté reprogramando:
EDITAR:
public void reScheduleTimer(int duration) {
timer = new Timer("alertTimer",true);
timerTask = new MyTimerTask();
timer.schedule(timerTask, 1000L, duration * 1000L);
}
private class MyTimerTask extends TimerTask {
@Override
public void run() {
// Do stuff
}
}