gpt4 book ai didi

android - CountDownTimer 未取消

转载 作者:行者123 更新时间:2023-11-30 00:00:58 28 4
gpt4 key购买 nike

我在这里定义倒计时。

然后,在 onclick 方法中为该变量定义新的倒数计时器:

   public void showQuestion(int questionNumber){
questionTimer = new CountDownTimer(10500,1000) {
@Override
public void onTick(long millisUntilFinished) {
remainingTime.setText(Long.toString(millisUntilFinished/1000));
}

@Override
public void onFinish() {
remainingTime.setText("0");
showCorrectAnswer();
}
}.start();
}

然后我在另一个按钮的 onclick 方法上取消了这个计时器;

    public void selectOption(View view) {
questionTimer.cancel();
}

此时取消成功。然后我再次做同样的事情。 showQuestion 方法以相同的方式工作。

   public void showQuestion(int questionNumber){
questionTimer = new CountDownTimer(10500,1000) {
@Override
public void onTick(long millisUntilFinished) {
remainingTime.setText(Long.toString(millisUntilFinished/1000));
}

@Override
public void onFinish() {
remainingTime.setText("0");
showCorrectAnswer();
}
}.start();
}

启动成功。当我想在另一个按钮 onclick 方法上取消此计时器时,它不起作用。没有任何错误。我希望它能清楚。非常感谢。

最佳答案

您的代码的问题是在第一个计时器完成或取消之前,计时器可以启动多次(有时不是故意的)。在那种情况下,当你试图取消它时,你只能取消第一个定时器。要解决这个问题,你只需要检查定时器是否正在运行,如果正在运行,等待它完成或取消。

定义一个全局参数:

Boolean timerRunning = false;

   public void showQuestion(int questionNumber){
if (timerRunning) return;
timerRunning = true;
questionTimer = new CountDownTimer(10500,1000) {
@Override
public void onTick(long millisUntilFinished) {
remainingTime.setText(Long.toString(millisUntilFinished/1000));
}

@Override
public void onFinish() {
remainingTime.setText("0");
showCorrectAnswer();
timerRunning = false;
}
}.start();
}

您的选择选项方法可以更改为以下:在取消之前检查计时器是否为空。

public void selectOption(View view) {
if (questionTimer != null) questionTimer.cancel();
timerRunning = false;

}

关于android - CountDownTimer 未取消,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49922965/

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