【发布时间】:2016-11-25 00:04:50
【问题描述】:
我正在扩展 CountDownTimer 类以获得一些自定义功能。在 onTick() 中,如果满足某些条件,我会调用 cancel() ,期望这将结束,但是 onTick() 回调会被调用,直到倒计时已到。那么如何防止这种情况发生呢?
【问题讨论】:
标签: android
我正在扩展 CountDownTimer 类以获得一些自定义功能。在 onTick() 中,如果满足某些条件,我会调用 cancel() ,期望这将结束,但是 onTick() 回调会被调用,直到倒计时已到。那么如何防止这种情况发生呢?
【问题讨论】:
标签: android
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);
}});
}
}
【讨论】:
CountDownTimer 对我来说也可以正常工作,但我认为它只有在 CountDownTimer 实现之外调用它才有效(即不要在 onTick 中调用它)。
在里面调用它也没有用。
【讨论】:
我尝试了这段代码 sn-p,因为大多数答案都说您无法在其实现中取消计时器,因此我尝试在 onFinish 中使用处理程序。旧帖子,但如果有人遇到它,它会很有帮助。
new Handler().post(new Runnable() {
@Override
public void run() {
timerTextView.setText("00:" + String.format("%02d", counter));
cancel();
}
});
【讨论】: