CountDownTimer 在非例外时间点触发 onTick

CountDownTimer firing onTick at not excepted time point

我有以下 CountDownTimer:

countdown = new CountDownTimer(10000, 5000) {
        @Override
        public void onTick(long millisUntilFinished) {
            // Stuff here
        }

        @Override
        public void onFinish() {
            // Restart countdown
            countdown.start();
        }
    }.start();

如图所示,有一个 5 秒的刻度间隔。但是当这个 CountDown 开始时,第一个间隔发生在 0 毫秒。

为什么我的第一个 tick 在 0 毫秒而不是 5000 毫秒时触发?

关于 onTick() 的所有文档都是 "Callback fired on regular interval."

http://developer.android.com/reference/android/os/CountDownTimer.html#onTick(long)

为什么你认为它不应该立即触发?

如果想忽略对 onTick() 的第一个回调,您可以像这样添加一个布尔标志:

countdown = new CountDownTimer(10000, 1000) {
        private boolean first = true;
        @Override
        public void onTick(long millisUntilFinished) {
            if (first) {
                first = false;
                return;
            }
            // Stuff here
        }

        @Override
        public void onFinish() {
            // Restart countdown
            first = true;
            countdown.start();
        }
    }.start();

在进一步查看 CountDownTimer 的用法后,您似乎也可以使用 Handler / Runnable 组合。

这是一个例子:

在你的 Activity 中你做了:

private Handler timerHandler;
private Runnable timerRunnable;

// ...

@Override
public void onCreate() {
    super.onCreate();
    timerHandler = new Handler();
    timerRunnable = new Runnable() {
        @Override
        public void run() {
            // Stuff here
            timerHandler.postDelayed(timerRunnable, 5000);
        }
    };
    timerHandler.postDelayed(timerRunnable, 5000);
}