0

由于 Timer() 的准确性,我正在使用它,但它的工作原理与 PostDelayed Handler 相同。它只被调用一次。这是定时器代码:

    public void setWFT() {
        WFT = new Timer();
        WFT.schedule(new TimerTask() {          
            @Override
            public void run() {
                WFTTimerMethod();
            }
        }, 60000); // 60 seconds delay
    }

    private void WFTTimerMethod() {
        this.runOnUiThread(Timer_Tick);
    }

    private Runnable Timer_Tick = new Runnable() {
        public void run() {
            // My commands here
        }
    };

一旦 Timer 启动,这只会在 60 秒后调用 run() 一次。有时,我必须取消定时器以更新延迟(替换“60000”值)。要再次启动计时器,我只需使用新的延迟值再次调用 WFT() 来重新创建计时器。

问题是,当我使用以下方法取消计时器时:

WFT.cancel();
WFT.purge();

定时器不启动。run() 没有在它应该执行的时候执行。所以我的问题是我使用 cancel() 和 purge() 还是只使用 cancel()?

谢谢

4

2 回答 2

3

从 Java API开始purge()

大多数程序不需要调用这个方法。它专为取消大量任务的罕见应用程序而设计。调用此方法是以时间换空间:该方法的运行时间可能与 n + c log n 成正比,其中 n 是队列中的任务数,c 是取消的任务数。

所以你只需要打电话cancel()

于 2013-04-17T13:52:55.037 回答
0

来自cancel()文档:

不能在此计时器上安排更多任务。

于 2013-04-17T13:54:15.150 回答