在我的 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 来取消()它(因为它不应该再存在了)。如果我在 外部代码 中将 Timer 声明为 final 变量以便我可以执行此操作,取消后我将无法再重用它。那么我怎样才能终止那个 TimerTask 但仍然能够使用 Timer?
最佳答案
Android Timer 是基于 Android 开发者网站的线程:
http://developer.android.com/reference/java/util/Timer.html
When a timer is no longer needed, users should call cancel(), which releases the timer's thread and other resources. Timers not explicitly cancelled may hold resources indefinitely.
我建议仅在 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);
}
}
关于android - 在android中重用定时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20929980/