gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 14:30:48 24 4
gpt4 key购买 nike

我正在尝试实现一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com