Androidアプリケーションで定期的なタスクを実行する必要があります。私は現在、次のようなタイマーを使用しています。
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
これは私が必要としていることを正確に実行しますが、問題があります。エミュレーターまたは電話で時刻を変更すると、タイマーが実行を停止します。これは、時間を変更したときにログに表示されるものです。
D/SystemClock( 331): Setting time of day to sec=1278920137
W/SystemClock( 331): Unable to set rtc to 1278920137: Invalid argument
タイマーが中断されることについては何もありませんが、システムクロックが変更された後は明らかにもう実行されません。アプリケーションが実行されている限り、常に実行し続けるタスクが必要です。
このように停止した場合、どうすればタイマーを再開できますか?TimerまたはTimerTaskには、現在実行されているかどうかを確認するメソッドがないため、いつ再スケジュールするかわかりません。何か案は?