Je dois exécuter une tâche périodique dans une application Android. J'utilise actuellement une minuterie comme ceci:La modification de l'horloge système Android arrête les compteurs. Comment puis-je les redémarrer?
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
Cela fait exactement ce que j'ai besoin, mais il y a un problème: si je change l'heure sur l'émulateur ou par téléphone, la minuterie cesse de fonctionner. C'est ce qui apparaît dans le journal quand je change le temps:
D/SystemClock( 331): Setting time of day to sec=1278920137
W/SystemClock( 331): Unable to set rtc to 1278920137: Invalid argument
Rien au sujet de la minuterie étant interrompue, mais il ne fonctionne pas bien plus après l'horloge du système a changé. J'ai besoin de la tâche pour continuer à fonctionner tout le temps tant que l'application est en cours d'exécution. Comment puis-je redémarrer la minuterie si elle est arrêtée comme ça? Il n'y a aucune méthode sur le Timer ou le TimerTask pour vérifier s'il est en cours d'exécution, donc je ne peux pas savoir quand le replanifier. Des idées?
c'est une excellente solution que je cherche! Merci – JosephT