Java 每次我按下按钮时都会创建一个新的计时器实例
我正在设计一个递增时钟,它将在点击按钮时执行,并在时间流逝时更新文本视图的内容。但是每次我按下这个按钮,前一个时钟就不会被清除,一个新的实例就会启动并与前一个线程并行运行。我无法理解,因为我该如何阻止同样的行为。以下是我的代码: 类级别变量: ================================================================================Java 每次我按下按钮时都会创建一个新的计时器实例,java,android,time,Java,Android,Time,我正在设计一个递增时钟,它将在点击按钮时执行,并在时间流逝时更新文本视图的内容。但是每次我按下这个按钮,前一个时钟就不会被清除,一个新的实例就会启动并与前一个线程并行运行。我无法理解,因为我该如何阻止同样的行为。以下是我的代码: 类级别变量: ================================================================================ private View.OnClickListener but = new View.O
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();
}
}
};
只是浏览了一下,但在谷歌定时器之后,看到了这个方法,它说: 当不再需要计时器时,用户应调用cancel(),这将释放计时器的线程和其他资源。未明确取消的计时器可能会无限期地保留资源
如果每次单击“创建新计时器”,您会期望什么:tripTimeCounter=new CountDownTimer(60*1000,1000)?如何取消旧计时器?这就是我所困惑的!。检查取消方法混乱的部分:对onTick(long)的调用与此对象同步,以便在上一次回调完成之前不会发生对onTick(long)的一次调用。为什么这
this.start()
?。但是在哪里调用取消?这就是问题所在,伙计!这一切都发生在一个按钮点击!大概就在新创建之前,比如:if(tripTimeCounter!=NULL)tripTimeCounter.cancel();tripTimeCounter=new CountDownTimer(60*1000,1000){…等可以工作,只有秒被重置。另一天令人难以置信!CountDownTimer类型的方法purge()没有定义。你是对的,对此表示抱歉。你说的只有秒被重置是什么意思?只是为了让我正确理解。
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();
}
}
};