我想在 TextView
中显示一个简单的 CountDownTimer
,但它似乎立即从 30 下降到 28,好像两者之间存在延迟。我不确定如何着手修复这个小错误。这是我的代码:
这是在 Button
的点击监听器中:
new CountDownTimer(30000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
coolDownTimer.setText("Cool Down for: " + String.valueOf(millisUntilFinished / 1000));
}
@Override
public void onFinish() {
animatedPic.setClickable(true);
// reregister the proximity sensor
sm.registerListener(sensorListener, proxSensor, SensorManager.SENSOR_DELAY_NORMAL);
coolDownTimer.setText("GO!");
}
}.start();
最佳答案
有两个问题:
第一个问题是倒数计时器直到第一个滴答时间结束后才执行,在这种情况下,是在 1000 毫秒之后。
其次,耗时只是近似值。 millisUntilFinished 不能保证以间隔的增量出现(您可以看到,如果您不除以 1000,则第一个刻度略低于 29000)。
要记住的另一件事是,您不能保证会收到滴答声。也就是说,如果设备没有足够的时间来完成一个滴答声,它可能会跳过它(通常只有在较快的间隔时才会注意到)。
要解决问题 1,您只需运行 onTick 代码(或将其重构为自己的方法)并在启动倒数计时器时运行它。
对于问题 2,您可以简单地将数字四舍五入。
例如:
new CountDownTimer(30000, 1000)
{
@Override
public void onTick(long millisUntilFinished)
{
performTick(millisUntilFinished);
}
@Override
public void onFinish()
{
animatedPic.setClickable(true);
// reregister the proximity sensor
sm.registerListener(sensorListener,proxSensor,SensorManager.SENSOR_DELAY_NORMAL);
coolDownTimer.setText("GO!");
}
}.start();
performTick(30000);
void performTick(long millisUntilFinished) {
coolDownTimer.setText("Cool Down for: " + String.valueOf(Math.round(millisUntilFinished * 0.001f)));
}
如果您想确保以最小的延迟更新适当的值,您可能需要考虑减少间隔。
关于android - CountDownTimer 在 TextView 上显示时跳过一秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24026543/