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