我的逻辑是:
我的问题:
此机制不起作用。计时器在1秒内被触发几次。但是,定时器的触发频率不应超过每3秒一次。
在我的计时器中有一个布尔值isRunning。当计时器启动时,设置isRunning = true。当TimerTask被触发时,它会被设置为false。
public class DBconnectDelayTimer extends Timer {
/**
* Indicates if the Timer is running
*/
private boolean isRunning;
public DBconnectDelayTimer() {
super();
isRunning = false;
}
@Override
public void schedule(TimerTask task, long delay) {
isRunning = true;
super.schedule(task, delay);
}
public boolean isRunning() {
return isRunning;
}
public void resetTimer() {
isRunning = false;
}
}
我以这种方式使用计时器:
for(Item item : items) {
if(item.getUID.equals(uid)) {
itemExist = true;
break;
}
}
if(!itemExist) {
items.add(item);
runTimer();
}
runTimer方法如下:
private void runTimer() {
if (!mTimer.isRunning()) {
mTimer.schedule(getTimerTask(), 3000);
Log.d("WTF", "Run Timer");
}
}
mTimer.schedule()应该将isRunning设置为true,并且计时器不应该在前一个TimerTask运行之前安排另一个TimerTask。
private TimerTask getTimerTask() {
final Fragment hostFragment = this;
Log.d("WTF", hostFragment.getClass().toString());
return new TimerTask() {
@Override
public void run() {
/**
* Reset Timer so it can be scheduled for next round of execution
*/
mTimer.resetTimer();
}
}
}
然而,它失败了。日志显示:
11-30 18:28:25.002 26842-27081/com.nethom.itemmanager D/WTF: Run Timer
11-30 18:28:25.003 26842-27085/com.nethom.itemmanager D/WTF: Run Timer
11-30 18:28:25.003 26842-27086/com.nethom.itemmanager D/WTF: Run Timer
11-30 18:28:25.003 26842-27083/com.nethom.itemmanager D/WTF: Run Timer
11-30 18:28:25.003 26842-27082/com.nethom.itemmanager D/WTF: Run Timer
11-30 18:28:25.003 26842-27084/com.nethom.itemmanager D/WTF: Run Timer
感谢您的帮助。