how to stop/cancel android CountDownTimer

前端 未结 3 688
臣服心动
臣服心动 2020-11-29 08:25

I\'m extending the CountDownTimer class to obtain some custom functionality .In onTick() in case some conditions are met I call cancel() , expecting that will be the end of

相关标签:
3条回答
  • 2020-11-29 08:58

    CountDownTimer is also working fine for me, but I think it only works if you call it OUTSIDE of the CountDownTimer implemetation (that is don't call it in the onTick).

    Calling it inside also didn't worked.

    0 讨论(0)
  • 2020-11-29 09:06

    I tried this code snippet, since most answers are saying you cannot cancel the timer inside its implementation, thus i tried using a handler inside onFinish. Old post but if anyone comes across this its helpful.

    new Handler().post(new Runnable() {
                @Override
                public void run() {
                    timerTextView.setText("00:" + String.format("%02d", counter));
                    cancel();
                }
            });
    
    0 讨论(0)
  • 2020-11-29 09:17

    CountDownTimer.cancel() method seems to be not working. Here's another thread without a solution Timer does not stop in android.

    I would recommend you to use Timer instead. It's much more flexible and can be cancelled at any time. It may be something like that:

    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);
                }});
        }
    }
    
    0 讨论(0)
提交回复
热议问题