java - 程序与 CountDownTimer 配合得很好,直到还剩 3 秒,然后它调用两次

标签 java android nullpointerexception textview findviewbyid

我正在尝试实现一个 CountDownTimer 来发布可视文本倒计时,直到达到 0,然后发送特定消息。一切正常,直到我到达 3 秒,它调用了我的 did() 方法两次;还剩 3 秒时一次,计数器完成时一次。

我确信唯一一次调用 did() 的时间是调用 CountDownTimer() 中的 onFinish() 时。我不知道为什么它会在同一时间调用两次。

我的Java代码:

mainCounter = new CountDownTimer(30000, 1000){
@Override
public void onTick(long millisUntilDone){
    int hours = (int) (millisUntilDone/3600000);
    int mins = 0, secs = 0;
    long timeLeft = millisUntilDone % 3600000;
    if((int)timeLeft != 0){
        mins = (int) (timeLeft/60000);
    }
    long timeLeftStill = timeLeft % 60000;
    if((int)timeLeftStill != 0){
        secs = (int) (timeLeftStill/1000);
    }

    ((TextView)findViewById(R.id.timer_label)).setText("You have " + hours + " hours, " + mins + " mins, " + secs + " secs left");
    }

    @Override
    public void onFinish() {
    // Send Message, Out of Time
    ((TextView)findViewById(R.id.timer_label)).setText("MESSAGE!");
        num++;
        done();  //My Own Method
        this.cancel();
    }
}.start();

我有另一个可以完美工作的计数器,我已将其注释掉,以确保它不会影响此计数器,就像我说的,这个计数器工作正常,直到我还剩 3 秒。

最佳答案

对于您在还剩 3 秒时调用 onFinish() 方法的问题,您应该阅读答案 here 。实际上你应该阅读 Android: CountDownTimer skips last onTick()! 上的所有答案问题。它将帮助您理解原因。谈到该线程,通常人们都会遇到问题,即完成被称为大约。预计时间前 1 秒。对于他们来说,可以理解(从引用的答案),在每个价格变动开始时,在调用 onTick() 之前,计算倒计时结束之前的剩余时间。如果这个时间小于倒计时时间间隔,则不再调用onTick。但那里的答案还指出,后台可能有其他进程延迟运行 CountDownTimer 的线程,而且 Android 本身在调用 CountDownTimer 的消息处理程序时可能会产生一个小的延迟,因此您不希望的延迟可能是由于所有这些原因。

答案中几乎没有提出解决方法。一种是减少间隔时间或增加最大 countDownTimer 值。还有一种 countDownTimer 方法的替代方法。希望这可以帮助您了解可能的原因并帮助您解决问题。

关于java - 程序与 CountDownTimer 配合得很好,直到还剩 3 秒,然后它调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16867654/

相关文章:

java - 如何获取文件中的特定字符串

java - 如何在折线图中的标记 View 上显示 X 标签?

java - 如何在post请求中传递两个参数?

java - 在 Android Studio 中使用 Google 翻译 API

java - 在批处理运行期间检查 NPE

java - 修改 Spring 消息文本而不重新启动应用程序?

android - ImageView 不能在 RelativeLayout 中居中

javascript - 错误:xwalk_autofill_client.cc(121) 未在虚拟无效 xwalk::XWalkAutofillClient::OnFirstUserGestureObserved() 中实现

java - 如何处理 RxJava 2.x 中的空值?

java - 什么是 NullPointerException,我该如何解决?