我正在扩展CountDownTimer类,以获得一些自定义功能.In onTick(),以便在满足某些条件的情况下调用cancel(),期望这将是它的末尾,但是onTick()回调得到调用,直到到达倒计时。那么,如何防止这种情况发生呢?
发布于 2010-07-02 10:37:38
CountDownTimer.cancel()方法似乎不起作用。这是另一个没有解决方案Timer does not stop in android的线程。
我建议你改用计时器。它更灵活,可以随时取消。可能是这样的:
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);
}});
}
}
发布于 2010-11-21 19:59:59
CountDownTimer对我来说也工作得很好,但我认为只有在CountDownTimer实现之外调用它才能起作用(即不要在onTick中调用它)。
在内部调用也不起作用。
发布于 2016-11-25 00:04:50
我尝试了这个代码片段,因为大多数答案都说您不能在其实现中取消计时器,因此我尝试在onFinish中使用一个处理程序。以前的帖子,但如果有人遇到这篇文章,它是有帮助的。
new Handler().post(new Runnable() {
@Override
public void run() {
timerTextView.setText("00:" + String.format("%02d", counter));
cancel();
}
});
https://stackoverflow.com/questions/3138348
复制相似问题