Android倒计时显示1持续2秒

Android倒计时显示1持续2秒,android,Android,可能重复: 为什么要两次使用“1”节目?我只是希望它能顺利倒计时,而不是在最后一秒挂断。有人对如何解决这个问题有什么想法吗 以下是Android开发者页面的代码: new CountdownTimer(30000, 1000) { public void onTick(long millisUntilFinished) { mTextField.setText("seconds remaining: " + millisUntilFinished / 1000

可能重复:

为什么要两次使用“1”节目?我只是希望它能顺利倒计时,而不是在最后一秒挂断。有人对如何解决这个问题有什么想法吗

以下是Android开发者页面的代码:

  new CountdownTimer(30000, 1000) {

     public void onTick(long millisUntilFinished) {
         mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
     }

     public void onFinish() {
         mTextField.setText("done!");
     }
  }.start();

我创建了一个新项目,并复制和粘贴了这些代码,以确保我没有意外地在我的程序中弄乱一些东西。我已经在10.1标签上测试过了。当我运行它时,它会这样做:“5”、“4”、“3”、“2”、“1”、“1”、“完成!”。

倒计时不精确,它会返回尽可能接近1秒的时间(在本例中),但这通常不足以满足您的需要

如果您记录ms var,您将看到第一次命中的结果类似于29384,依此类推,它永远不会是30000、29000等。无法获得使计数器按照当前实现的预期工作所需的精度

大多数情况下都可以解决此问题。首先,降低你的时间间隔,这样你得到的更新比你想要输出的要多,所以不要用1秒的时间去做100ms,这样你就会产生1秒倒计时的错觉,因为你每秒至少会得到几次更新(最坏的情况)

要优化该位,请对每个条目的结果进行四舍五入,并进行简单检查,以查看是否应执行更新(secondsLeft已更改),以及是否已更新UI和secondsLeft累加器。此外,我还建议onFinish生成最终结果(0),以防系统出现故障,因为发生了消耗cpu周期的事情

不管怎样,这里是修改过的代码,如果你的系统负载不重的话,100次中有99.99次可以使用它。注意:你可能可以用250毫秒跑完全程,这取决于你自己

 int secondsLeft = 0; 

 new CountDownTimer(30000, 100) {
     public void onTick(long ms) {
         if (Math.round((float)ms / 1000.0f) != secondsLeft)
         {  
             secondsLeft = Math.round((float)ms / 1000.0f);
             TV.setText("seconds remaining: " +secondsLeft );
         }
         Log.i("test","ms="+ms+" till finished="+secondsLeft );
     }

     public void onFinish() {
         TV.setText("0");
     }
}.start();

您应该在
onTick(long)
方法中注销
millisuntilfished
的值。这就是用来更新你的
TextView
的东西。检查这个-答案很好,但我认为API应该暗示这个类不精确。差不多三年后,倒计时仍然显示最后一个滴答声两次!但是这个解决方案对我有效,谢谢+1在尝试了这么多解决方案之后,这个解决方案终于对我起了作用。谢谢+1您也可以使用
TimeUnit.ms.toSeconds(ms)