增量计时器

时间:2010-05-26 11:09:02

标签: java android timer increment

我目前正在使用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()?

1 个答案:

答案 0 :(得分:4)

我将如何做到这一点:

1)安排执行单个执行而不是重复执行

2)在执行结束时(可能在finally块中),安排新的单次执行任务,延迟时间更长。请注意,您必须创建任务的新实例,否则计时器将发出警告(IllegalStateException)。这意味着您不能再使用匿名内部类了。