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);
}
我有以下 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);
}