如何停止/取消android CountDownTimer

时间:2010-06-29 06:33:45

标签: android

我正在扩展CountDownTimer类以获得一些自定义功能。在onTick()中,如果满足某些条件,我调用cancel(),期望它将结束,但是onTick()回调会被调用,直到倒计时了。那么如何防止这种情况发生呢?

3 个答案:

答案 0 :(得分:18)

CountDownTimer.cancel()方法似乎无法正常工作。这是另一个没有解决方案的线程Timer does not stop in android

我建议你改用Timer。它更加灵活,可以随时取消。它可能是这样的:

public class MainActivity extends Activity {    
    TextView mTextField;
    long elapsed;
    final static long INTERVAL=1000;
    final static long TIMEOUT=5000;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mTextField=(TextView)findViewById(R.id.textview1);

        TimerTask task=new TimerTask(){
            @Override
            public void run() {
                elapsed+=INTERVAL;
                if(elapsed>=TIMEOUT){
                    this.cancel();
                    displayText("finished");
                    return;
                }
                //if(some other conditions)
                //   this.cancel();
                displayText("seconds elapsed: " + elapsed / 1000);
            }
        };
        Timer timer = new Timer();
        timer.scheduleAtFixedRate(task, INTERVAL, INTERVAL);
    }

    private void displayText(final String text){
        this.runOnUiThread(new Runnable(){
            @Override
            public void run() {
                mTextField.setText(text);
            }});
    }
}

答案 1 :(得分:15)

CountDownTimer对我来说也很好用,但我认为它只有在你将其称为CountDownTimer实现的OUTSIDE时才有效(即不要在onTick中调用它)。

调用它也没有用。

答案 2 :(得分:0)

我尝试了这段代码片段,因为大多数答案都说你无法取消其实现中的计时器,因此我尝试在onFinish中使用处理程序。老帖子,但如果有人遇到这个它有用。

new Handler().post(new Runnable() {
            @Override
            public void run() {
                timerTextView.setText("00:" + String.format("%02d", counter));
                cancel();
            }
        });