如何停止/取消android CountDownTimer?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (36)

我在扩展CountDownTimer类来获得一些自定义的功能。在onTick()中,如果满足一些条件,我调用cancel(),期望这将是它的结束,但onTick()回调获得调用,直到count已达到。那么如何防止这种情况发生?

提问于
用户回答回答于

CountDownTimer对我来说工作正常,但我认为它只有在你将其称为CountDownTimer实现之外的情况下才有效。

用户回答回答于

CountDownTimer.cancel()方法似乎不起作用。

我会建议你使用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);
            }});
    }
}

扫码关注云+社区