Cómo cancelar el horario existente de un temporizador
Actualmente estoy utilizando un temporizador para ejecutar alguna función cada intervalo de tiempo. Sin embargo, más adelante cuando quiero cambiar el intervalo de ejecución de la función, no puedo cancelar la programación anterior. Cómo se puede resolver esto? Gracias
Con el método timer.cancel()
puede cancelar el temporizador y todas las tareas programadas. (Consulte la documentación de la API ) o puede llamar al método de cancelación en su TimerTask timertask.cancel()
(consulte la documentación de la API )
Si desea cambiar la hora programada debe cancelar la TimerTask y agregar una nueva TimerTask.
Usted podría mirar en el uso de un ScheduledThreadPoolExecutor en lugar de un Timer
.
El uso es bastante sencillo. Se crea una instancia de un ejecutor:
ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor( 1 );
Y, a continuación, cuando desee agregar una tarea a la que llame:
executor.scheduleAtFixedRate( myRunnable, delay, interval, unit );
Cuando myRunnable
es su tarea (que implementa la Runnable
Runnable), el delay
es cuánto tiempo antes de que la tarea se ejecute la primera vez, el interval
es el tiempo entre la ejecución de la tarea después de la primera ejecución. delay
y el interval
son meassured basado en el parámetro unit
, que puede ser TimeUnit. * (Donde * es SECONDS, MINUTES, MILLISECONDS etc.).
Entonces para detener la ejecución que usted llama:
executor.shutdownNow();
Y luego puede volver a enviar su tarea con un intervalo diferente.
Nota: Es posible que deba crear una nueva instancia del ejecutor antes de volver a enviar la tarea, pero no estoy muy seguro de por qué.