CountDownTimer在没有例外的时间点触发onTick

时间:2015-03-03 12:32:32

标签: android countdowntimer

我有以下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毫秒。

为什么我的第一个滴答是在0毫秒时间被触发,而不是5000毫秒时间?

1 个答案:

答案 0 :(得分:1)

所有文档都要说onTick()是"定期间隔触发回调。"

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);
}