Android 安卓“倒计时”坏了?

Android 安卓“倒计时”坏了?,android,Android,我使用了一个60秒的计时器倒计时,这看起来是一个非常有前途的倒计时计时器: 但有时我发现,在执行onFinish之前,对onTick的调用实际上并没有60次。由于这个原因,我经常发现计时器停留在1而不是0上。当我坚持使用调试器时,这一点变得更加明显。事实上,当我在调试器中放置断点时,在调用onFinish之前,onTick只被调用了50次 我是否遗漏了什么,或者我真的应该假设当且仅当所有假定的onTick函数都被调用时,才不能保证调用onFinish 这是我的密码: public Som

我使用了一个60秒的计时器倒计时,这看起来是一个非常有前途的
倒计时计时器

但有时我发现,在执行
onFinish
之前,对
onTick
的调用实际上并没有60次。由于这个原因,我经常发现计时器停留在1而不是0上。当我坚持使用调试器时,这一点变得更加明显。事实上,当我在调试器中放置断点时,在调用
onFinish
之前,
onTick
只被调用了50次

我是否遗漏了什么,或者我真的应该假设当且仅当所有假定的
onTick
函数都被调用时,才不能保证调用
onFinish

这是我的密码:

    public SomeRetryTimer(long future, long countDownInterval) {
        super( 60*1000, 1000);
        mCurrentCountdown = 60
    }

    @Override
    public void onTick(long l) {
        mCurrentCountdown--;

        doSomething();
    }

    @Override
    public void onFinish() {
        finishStuff(); // at this point, i find that mCurrentCountdown is sometimes not 0
    }

我是否做错了什么,或者这是API的问题?我的意思是,我看了源代码,计时器应该在处理程序中同步。。。消息发布是否有问题?

滴答声不是在保证的时间间隔内。。。这就是为什么它会将
long
传递给您的
onTick

从文件中

对onTick(long)的调用将同步到此对象,以便 调用onTick(long)不会在上一次回调之前发生 完成这仅在以下情况下相关: onTick(long)需要相当长的时间来执行 与倒计时间隔相比

因此,这意味着,如果在onTick中执行的工作比“常规间隔”所需的时间更长,则该间隔将变得越来越不规则。当您添加调试器的开销时,肯定会出现这种情况


如果你必须在onTick中工作,我会在一个不在计时器线程中的线程中工作。但即便如此,我认为你也不能也不应该依赖于获得一定数量的滴答声。当操作系统不能保证实时语义时,这似乎是有风险和容易出错的

检查
mCurrentCountdown
的值是否是您知道发生这种情况的唯一方法?我认为无论如何,
doSomething()
都不会引起问题?我自己在这门课上从来没有遇到过问题。所以我很好奇它是否有问题