У меня есть сценарий, в котором мне нужно выполнить определенную задачу с определенным интервалом, однако я хочу иметь возможность сбросить / перезапустить таймер без повторного создания. Вот мой код для лучшего понимания.
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, но этот код находится в Сервисе, и мне не нужны обновления, поддерживающие поток пользовательского интерфейса.