特定の間隔で特定のタスクを実行する必要があるシナリオがありますが、再インスタンス化せずにタイマーをリセット/再開できるようにしたいと考えています。より良い理解のための私のコードはここにあります。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の使い方をしていましたが、このコードはサービス内にあり、UIスレッド対応の更新は必要ありません。
私はHandlerとAlarmManagerを調べました。私の仕事が2秒ごとに繰り返されることを考えると、AlarmManagerは最良の選択肢ではありません。本質的にHandlerとTimerは同じことを行います。しかし、私の問題は、タイマ/ハンドラが動作している間に "次のティック"をリセットすることができます。 –
Yeap、AlarmManagerはあまりにも重いです。 'Handler'をリセットするには' Handler.removeCallbacks() 'と' Handler.postDelayed() 'をもう一度呼びます。これにより、遅延が再開されます。 – inazaruk
「リセットタイマー」の例で答えが更新されました。 – inazaruk