我目前正在使用Timer和TimerTask每30秒执行一些工作。
我的问题是,每次我做这项工作后,我想增加定时器的间隔时间。
所以例如它在定时器点火之间以30秒开始,但是我想在间隔时间加10秒,以便下次定时器在点火前需要40秒。
这是我以前的代码:
public void StartScanning() {
scanTask = new TimerTask() {
public void run() {
handler.post(new Runnable() {
public void run() {
wifiManager.startScan();
scanCount++;
if(SCAN_INTERVAL_TIME <= SCAN_MAX_INTERVAL){
SCAN_INTERVAL_TIME = SCAN_INTERVAL_TIME + SCAN_INCREASE_INTERVAL;
t.schedule(scanTask, 0, SCAN_INTERVAL_TIME);
}
}
});
}};
Log.d("SCAN_INTERVAL_TIME ** ", "SCAN_INTERVAL_TIME ** = " + SCAN_INTERVAL_TIME);
t.schedule(scanTask, 0, SCAN_INTERVAL_TIME);
}
改进代码
@Override
public void StartScanning() {
t.schedule(new ScanTask(),SCAN_INTERVAL_TIME);
}
class ScanTask extends TimerTask{
@Override
public void run() {
wifiManager.startScan();
scanCount++;
if(SCAN_INTERVAL_TIME < SCAN_MAX_INTERVAL)
SCAN_INTERVAL_TIME = SCAN_INTERVAL_TIME + SCAN_INCREASE_INTERVAL;
t.schedule(new ScanTask(), SCAN_INTERVAL_TIME);
}
}
它现在有效,但每次浪费都会创建一个新的ScanTask()?
答案 0 :(得分:4)
我将如何做到这一点:
1)安排执行单个执行而不是重复执行
2)在执行结束时(可能在finally块中),安排新的单次执行任务,延迟时间更长。请注意,您必须创建任务的新实例,否则计时器将发出警告(IllegalStateException)。这意味着您不能再使用匿名内部类了。