android - CountDownTimer 在 TextView 上显示时跳过一秒

标签 android timer textview

我想在 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/

相关文章:

c - 下面的c程序有什么错误?

c - 为什么我的程序占用如此多的 CPU 时间,尽管大部分时间都处于 sleep 状态?

c# - 锁定困惑的串口端口句柄

android - 是否有行业标准让 Android 的按钮文本为大写字母或小写字母?

android - 我在LogCat文件中找不到错误

java - 如何在android中使用后台服务获取经纬度?

android - 这个Android程序有什么问题?

java - Eclipse 不显示 TextView

android - 微调器上的文本是白色背景上的白色

android - 苔丝二找不到 libpng.so