倒计时器的cancel()方法无法正常工作

6

我是 Android 开发的新手,正试图制作一款小游戏。 CountDownTimer.cancel() 对我无效。 有什么建议吗? 谢谢你的回答!

CountDownTimer cdt = new CountDownTimer(120000, 1000) {

            public void onTick(long millisUntilFinished) {
                maxTime = (int) (millisUntilFinished / 1000);
                timer.setText(String.valueOf(maxTime));
            }

            public void onFinish() {

            }
        };

        if (startTimer == true) {
            cdt.start();
        } else {
            cdt.cancel();
        }

请提供完整的代码,startTimer 是什么?它的值是多少?它何时会被更改? - gio
你是否遇到了任何异常?如果有异常,请提供完整的代码以及logcat跟踪。 - Rajen Raiyarela
嗨gio,感谢你的回答。这是完整的方法。当调用cancel()方法时,我没有得到任何异常。什么也没有发生。 :( - Jagath Banneheka
2个回答

11

这里我需要做出一个假设,因为代码并没有显示得很清楚!显然你正在使用countDownTimer作为内部类在onCreate中,这会在startTimer == true时触发计时器,并且无论如何都会创建对象!我想最好创建一个全局实例的CountDownTimer

然后以这种方式编写您的代码:

if(startTimer == true) {
    cdt = new CountDownTimer(120000, 1000) {
        public void onTick(long millisUntilFinished) {
            maxTime = (int) (millisUntilFinished / 1000);
            timer.setText(String.valueOf(maxTime));
        }

        public void onFinish() {

        }
    }.start(); //start the countdowntimer
}
else{
    cdt.cancel();
}

谢天谢地,你是最棒的……我刚要放弃这个了…… - jayz
我在onCreate和onResume方法中都调用了startTimer方法。当我调用ctd.cancel()时,它会停止一个ctd对象而另一个仍在运行。最终,当我从onCreate方法中删除startTimer方法调用时才能正常工作。 - tejraj

0
        Boolean Myboolean = true;
        CountDownTimer MyCountDownTimer = new CountDownTimer(10000, 1000)
        {
            @Override
            public void onFinish()
            {
            }

            @Override
            public void onTick(long millisUntilFinished)
            {
                Log.i("onTick" , String.valueOf((millisUntilFinished / 1000) % 60));
                if(!Myboolean ) { cancel(); }
            }

        }.start();

我遇到了这个问题,CountDownTimer使用(MyCountDownTimer.cancel();)无法取消,最好的方法是使用布尔值,在任何你想要的地方将布尔值设置为false来取消CountDownTimer。(Myboolean = false;)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接