【问题标题】:Error in callback rate with CountDownTimer?CountDownTimer 的回调率错误?
【发布时间】:2011-05-08 18:33:20
【问题描述】:

在学习 Android 和 Java 时,我一直在构建一个小型暗房计时器应用程序。
最终使用了 CountDownTimer,因为它为我完成了大部分工作。 :{)
但是,我在课堂上遇到了一个错误。

我的初始结构使用 onTick() 回调来减少我的时间计数器,并更新剩余时间显示。例如,如果我设置它:

            new CountDownTimer(60000, 100) {

                 public void onTick(long millisUntilFinished) {
                     mDisplayTime.setText(String.valueOf(millisUntilFinished)/1000);
                     timeTenths -= 1;
                     updateDisplay();
                 }

                 public void onFinish() {
//                   mDisplayTime.setText("Done!");
                 }
              }.start();

总超时(60 秒)通过我的秒表在半秒内确定。
但是,显示的计数在时钟上停止 3.0 秒。
尝试使用它,我发现 onTick() 事件中始终存在 5% 的“短缺”。
我可以将第二个参数更改为 950 毫秒,但这是一个丑陋的组合...

最后,我将 onTick() 更改为显示实际的 millisUntilFinished,这很好,并且也消除了我的计数器。

这是 CountDownTimer() 的已知问题吗?

戴夫

【问题讨论】:

    标签: java android


    【解决方案1】:

    在致电 Google 之前,您是否使用 LogCat 进行过检查?即在您的onTick 方法中,您可能想要调试millisUntilFinish 带给您的内容,而不仅仅是依赖TextView。此外,除非我理解有误,否则您可能不得不考虑 onFinish() 您最后的“滴答声”。

    【讨论】:

    • 显示我的菜鸟无知,什么是 LogCat?最后一个滴答是 onFinish() 的想法很好,但在我的例子中它应该滴答 600 次(我错误地将它复制为 60000/1000),并且经常出现 30 短。
    • 在这种情况下,我真的不会依赖 onTick 被准确地调用 600 次。你应该做的是检查它的间隔有多准确。收到onTick 后,存储millisUntilFinished,然后在下一次调用中从前一个调用中减去新的millisUntilFinished,以查看它与100 毫秒的“接近”程度。而LogCat 让这种验证变得更加容易。
    猜你喜欢
    • 2017-10-09
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-26
    相关资源
    最近更新 更多