我有以下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毫秒时间?
答案 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);
}