我正在设计一个递增时钟,它将在按钮点击时执行并更新文本视图的内容,如同经过的时间。但每次按下此按钮时,前一个时钟都不会被清除,新实例将启动并与前一个线程并行运行。我无法理解,因为我如何阻止这种行为。以下是我的代码:
班级变量:
int repeatCounter = 1;
CountDownTimer tripTimeCounter;
=============================================== =================================
private View.OnClickListener but = new View.OnClickListener() {
public void onClick(View v) {
if (isOnline() == true) {
tripTimeCounter = new CountDownTimer(60 * 1000, 1000) {
@Override
public void onFinish() {
// TODO Auto-generated method stub
repeatCounter = repeatCounter + 1;
this.start();
// startTimeCounter();
}
@Override
public void onTick(long millisUntilFinished) {
// TODO Auto-generated method stub
timedisplay = (TextView) findViewById(R.id.textView3);
timedisplay.setText(formatInterval((repeatCounter * 60)
* 1000 - millisUntilFinished));
}
}.start();
tripTimeCounter.start();
} else {
Toast.makeText(getApplicationContext(),
"Not connected to the internet", Toast.LENGTH_LONG)
.show();
}
}
};
答案 0 :(得分:1)
只是略过了这一点,但在谷歌搜索计时器之后,看到cancel方法,其中说:
当不再需要计时器时,用户应该调用cancel(),这会释放计时器的线程和其他资源。未明确取消的计时器可能会无限期地保留资源。