【问题标题】:Why is my milliseconds count down not consistent?为什么我的毫秒倒计时不一致?
【发布时间】:2016-02-28 13:49:01
【问题描述】:

由于某种原因,我的计时器无法持续倒计时,有时会回到前一秒左右。

例如:如果我在 49 秒开始计时,这就是打印出来的内容:

(以毫秒为单位)

48774
47374
48909 //不一致

47063
46212
44987
48426 //不一致

46294 //不一致

44738
43636
42410
...等等

我所做的只是传递两个整数(分钟和秒)并将它们组合在一起以获得总毫秒数。

这是我的代码:

new CountDownTimer(((min * 60 + sec) * 1000), 1000) {//total time, interval

                public void onTick(long millisUntilFinished) {
                    System.out.println(millisUntilFinished);
                //...
                }
}

我怎样才能让毫秒保持一致?

编辑:

我也尝试将它添加到 onTick 但它仍然不起作用

if((int)prevMill > (int)millisUntilFinished){
        prevMill = millisUntilFinished;
        System.out.println(prevMill);
 }

【问题讨论】:

  • 因为一般情况下,系统时钟的精度只有+/- 15ms。您可以四舍五入到最接近的 15,它应该是一致的。
  • 但是必须有一些方法让它正确显示,我的意思是我们的手机已经有倒计时的计时器,没有任何不一致。

标签: android timer countdown


【解决方案1】:

我发现 onTick() 是从上一次 onTick() 运行的时间开始计算的,这会在每个刻度上产生一个微小的错误。

看到这个帖子:android CountDownTimer - additional milliseconds delay between ticks

【讨论】:

  • 这可以解释间隔不准确,但不能解释millisUntilFinished的增加值。我最好的猜测是 Dylan 不小心开始了多个倒计时。
【解决方案2】:

即使您在这样的 API 中以毫秒为单位指定值,默认情况下系统计时器的分辨率也只有大约 +/-15 毫秒(因操作系统等而异)。

这可以改变,见这里:https://randomascii.wordpress.com/2013/07/08/windows-timer-resolution-megawatts-wasted/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多