在我的Android应用程序中,我有以下相关代码:
/*Code outside*/
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Timer t = new Timer();
t.scheduleAtFixedRate(
new TimerTask(){
public void run(){
stuffToBeDone();
}
},someVariableDelay,someVariablePeriod);
}
}
一切都很顺利,直到我注意到每次按下按钮时 stuffToBeDone()都运行了一次。据我所知,每次调用 onClick()并且旧的Timer不再存在,但TimerTask不知何故幸存下来。
在第二个按钮单击中,我不再引用第一个定时器取消()它(因为它不再存在)。如果我在代码之外将Timer定义为 final 变量,这样我就可以做到,取消后我再也无法重用它了。那么如何终止TimerTask但仍然可以使用Timer?
答案 0 :(得分:4)
Android Timer是基于Android开发者网站的线程:
http://developer.android.com/reference/java/util/Timer.html
当不再需要计时器时,用户应该调用cancel(),这会释放计时器的线程和其他资源。未明确取消的计时器可能会无限期地保留资源。
我建议只在onclicklistener中实例化实例,即类似于此:
/*Code outside*/
Timer t = null;
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if(t == null)
t = new Timer();
else
t.cancel();
t.scheduleAtFixedRate(
new TimerTask(){
public void run(){
stuffToBeDone();
}
},someVariableDelay,someVariablePeriod);
}
}