私の読書から、ScheduledExecutorService は、Java でタイマーを開始および停止する正しい方法のようです。
タイマーを開始および停止するコードを移植する必要があります。これは定期的なタイマーではありません。このコードは、タイマーを開始する前に停止します。したがって、事実上すべての開始は実際には restart() です。ScheduledExecutorService を使用してこれを行う正しい方法を探しています。これが私が思いついたものです。私が見逃していることについてのコメントと洞察を探しています:
ScheduledExecutorService _Timer = Executors.newScheduledThreadPool(1);
ScheduledFuture<?> _TimerFuture = null;
private boolean startTimer() {
try {
if (_TimerFuture != null) {
//cancel execution of the future task (TimerPopTask())
//If task is already running, do not interrupt it.
_TimerFuture.cancel(false);
}
_TimerFuture = _Timer.schedule(new TimerPopTask(),
TIMER_IN_SECONDS,
TimeUnit.SECONDS);
return true;
} catch (Exception e) {
return false;
}
}
private boolean stopTimer() {
try {
if (_TimerFuture != null) {
//cancel execution of the future task (TimerPopTask())
//If task is already running, interrupt it here.
_TimerFuture.cancel(true);
}
return true;
} catch (Exception e) {
return false;
}
}
private class TimerPopTask implements Runnable {
public void run () {
TimerPopped();
}
}
public void TimerPopped () {
//Do Something
}
ティア、ルーブル