ScheduledThreadPoolExecutor только один раз "тикает"

Я использовал CountDownTimer для некоторых функций обратного отсчета, которые у меня есть в моем Activity. Я решил отойти от CountDownTimer и использовать ScheduledThreadPoolExecutor, потому что CountDownTimer не может отменить себя в onTick().

По какой-то причине мой Runnable в следующем коде выполняется только один раз. Я не уверен, почему он не выполняется несколько раз. Функция destroyCountdownTimer() не получает удар.

private ScheduledThreadPoolExecutor mCountdownTimer;
private Tick mTick;

class Tick implements Runnable {
    @Override
    public void run() {
        Log.e("tick", String.valueOf(mAccumulatedMilliseconds));
        mAccumulatedMilliseconds += 1000;
        populateTimeAccumulated();
        populateTimeRemaining();
        updatePercentages();

        if (mTotalMilliseconds <= mAccumulatedMilliseconds) {
            destroyCountdownTimer();
        }
    }
}

private void startCountdown() {
    if (mAccumulatedMilliseconds < mTotalMilliseconds) {
        mCounterIsRunning = true;

        if (mCountdownTimer == null) {
            mCountdownTimer = new ScheduledThreadPoolExecutor(1);
        }

        if (mTick == null) {
            mTick = new Tick();
        }

        mCountdownTimer.scheduleAtFixedRate(mTick, 1000, 1000, TimeUnit.MILLISECONDS);
    }
}

private void destroyCountdownTimer() {
    if (mCountdownTimer != null) {
        mCountdownTimer.shutdownNow();
        mCountdownTimer = null;
    }

    if (mTick != null) {
        mTick = null;
    }
}

Ответ 1

В документации говорится:

If any execution of the task encounters an exception, subsequent executions are suppressed.

Добавьте блок try-catch к вашей версии Tick.