java - 增量定时器

标签 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) 将任务安排为单次执行而不是重复执行

2) 在执行结束时(可能在 finally block 中),安排任务的新单次执行,延迟时间更长。注意你必须创建一个新的任务实例,否则定时器会报错(IllegalStateException)。这意味着您不能再使用匿名内部类。

关于java - 增量定时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2912313/

相关文章:

ios - ReactiveCocoa 中的自动重复倒数计时器

java - 从 Firebase 检索 Java 对象

java - 默认皮肤 LibGDX?

java - 在远程主机上没有root权限的情况下使用jenkins重启Jboss eap

java - 来自 ObjectInputStream 构造函数的 EOFException

php - 从 iphone/android 应用程序获取 referer

android - 从 apk 中读取 res 文件夹

Android - ResourcesNotFoundException 试图通过资源 id 设置操作栏图标时

java - Java代码中的定时器问题

python - 在上下文管理器中捕获 threading.Timer 抛出的异常