我有一個場景,我需要以特定的時間間隔運行某個任務,但是,我希望能夠重置/重新啓動計時器而不需要重新實例化。這是我的代碼,以便更好地理解。Android的java.util.Timer與重置選項
private TimerTask beatTask = new TimerTask() {
@Override
public void run() {
beatDetected();
}
};
public void beatDetected() {
timeoutTimer.cancel();
// handle my stuff and restart the timer.
timeoutTimer.schedule(beatTask, 2000);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
(timeoutTimer = new Timer()).schedule(beatTask, 2000);
return Service.START_STICKY;
}
本實施背後的想法是,beatDetected()
可以從外部事件調用,在這種情況下,一個時鐘嘀噠應該從即經過時間的下一個任務應該是復位那一刻發生。不過,我只能得到第一個滴答聲,從那時起,計時器就不起作用了。 我不限於使用Timer類,任何解決上述情況的方法都可以工作。我想知道如何使用postDelayed,但是這個代碼位於一個Service中,並且我不需要UI線程感知的更新。
我已經看過Handler和AlarmManager。考慮到我的任務每2秒重複一次,AlarmManager不是最佳選擇。本質上Handler和Timer會做同樣的事情。然而,我的問題是能夠在定時器/處理程序運行時重置「下一個打勾」。 –
Yeap,AlarmManager對此太「沉重」了。重置'Handler'只需再次調用'Handler.removeCallbacks()'而不是'Handler.postDelayed()'。這將重啓延遲。 – inazaruk
用「重置計時器」示例更新了答案。 – inazaruk