Ich muss eine periodische Aufgabe in einer Android-Anwendung ausführen. Ich verwende derzeit einen Timer wie folgt aus:Das Ändern der Android-Systemuhr stoppt die Timer. Wie kann ich sie neu starten?
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
Dies macht genau das, was ich brauche, aber es gibt ein Problem: wenn ich die Zeit auf dem Emulator oder Telefon ändern, stoppt die Zeit läuft. Dies ist, was im Protokoll angezeigt wird, wenn ich die Zeit ändern:
D/SystemClock( 331): Setting time of day to sec=1278920137
W/SystemClock( 331): Unable to set rtc to 1278920137: Invalid argument
Nichts über den Timer unterbrochen zu werden, aber es läuft eindeutig nicht mehr, nachdem die Systemuhr geändert hat. Ich brauche die Aufgabe, um die ganze Zeit zu laufen, solange die Anwendung läuft.
Wie kann ich den Timer neu starten, wenn er so gestoppt wird? Es gibt keine Methode auf dem Timer oder der TimerTask, um zu überprüfen, ob es gerade läuft, daher kann ich nicht wissen, wann ich es neu planen soll. Irgendwelche Ideen?
Das ist eine großartige Lösung, die ich suche! Vielen Dank – JosephT