2010-06-29 443 views
17

我扩展了CountDownTimer类来获得一些自定义的功能。在onTick()万一满足一些条件时,我调用cancel(),期待这将是它的结束,但是onTick()回调获得调用,直到达到倒数。那么如何防止这种情况发生?如何停止/取消android CountDownTimer

回答

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); 
      }}); 
    } 
} 
+4

刚刚作出了一个下拉更换为CountDownTimer,你可以从内部onTick取消:https://gist.github.com/737759 – 2010-12-12 01:04:01

+0

@GautierHayoun通过你的方法,我可以在onTick取消,但onTick( )仍然会被调用,不知道为什么 – Deqing 2014-05-18 03:44:47

15

CountDownTimer也正在为我好,但我认为,如果你的外部调用它的CountDownTimer implemetation的(也就是不把它在onTick)它才会起作用。

在里面调用它也没有奏效。

+3

是的,在onTick中调用它似乎不起作用。我强制调用onFinish并试图取消onFinish中的countdowntimer,并且它工作正常 – Basher51 2014-12-24 08:08:53

0

我试过这个代码片段,因为大多数答案都说你不能取消它的实现中的计时器,因此我试图在onFinish中使用一个处理程序。旧帖子,但如果任何人遇到这有助于。

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