如何停止/取消android CountDownTimer

ran*_*vee 17 android

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

Fed*_*dor 18

CountDownTimer.cancel()方法似乎无法正常工作.这是没有解决方案的另一个线程Timer不会在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);
            }});
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 刚刚替换了CountDownTimer,您可以在onTick中取消:https://gist.github.com/737759 (4认同)

mai*_*450 15

CountDownTimer对我来说也很好用,但我认为它只适用于你在CountDownTimer实现中调用它的外部(不要在onTick中调用它).

在里面打电话也没有用.

  • 是的,在onTick上调用它似乎不起作用.我强行打电话给Finin并尝试取消onFinish里面的倒计时器并且它工作了 (3认同)