Necesito ejecutar una tarea periódica en una aplicación de Android. Actualmente uso de un temporizador como esto:El cambio del reloj del sistema Android detiene los temporizadores. ¿Cómo puedo reiniciarlos?
final Handler guiHandler = new Handler();
// the task to run
final Runnable myRunnable = new Runnable() {
@Override
public void run() {
doMyStuff();
}
};
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
guiHandler.post(myRunnable);
}
}, 0, 30000); // run every 30 seconds
Esto hace exactamente lo que necesito, pero hay un problema: si cambio de la hora en el emulador o en el teléfono, el temporizador deja de funcionar. Esto es lo que aparece en el registro cuando cambio el tiempo:
D/SystemClock( 331): Setting time of day to sec=1278920137
W/SystemClock( 331): Unable to set rtc to 1278920137: Invalid argument
Nada sobre el temporizador se interrumpe, pero está claro que no se ejecuta más después de que el reloj del sistema ha cambiado. Necesito la tarea de seguir corriendo todo el tiempo mientras se ejecuta la aplicación.
¿Cómo puedo reiniciar el temporizador si se queda parado como este? No hay ningún método en el Timer o TimerTask para comprobar si se está ejecutando actualmente, por lo que no puedo saber cuándo reprogramarlo. ¿Algunas ideas?
¡esta es la gran solución que estoy buscando! Gracias – JosephT