是否有可能在Android中暂停和恢复TimerTask?

时间:2010-07-30 21:21:03

标签: java android timer

我正在调用这个任务:

TimerTask taskA = new ThreadA(this);
TimerTask taskB = new ThreadB(this);

tasks.add(taskA);
tasks.add(taskB);

timer.schedule(taskA, 10000);
timer.schedule(taskB, 5000);

以下是两个TimerTasks:

public class ThreadA extends TimerTask {

    private Ghost ghost;

    public GhostThread(Ghost ghost) {
        this.ghost = ghost;
    }

    @Override
    public void run() {
        ghost.stopBeingDeadAndBeAwesomeAgain();
    }
}

public class ThreadB extends TimerTask {

    private Ghost ghost;

    public WarnThread(Ghost ghost) {
        this.ghost = ghost;
    }

    @Override
    public void run() {
       ghost.beDeadAgain();
    }

}

正如你所看到的,我只是在5分钟之后调用一个方法。 10秒我不时想暂停“倒计时”。这意味着我希望直到5秒的时间不再运行。然后在稍后的时间点,我想恢复它。

我怎样才能实现?

1 个答案:

答案 0 :(得分:1)

最简单的解决方案是简单地制作TimerTask的副本,取消它以暂停,如果需要则清除,然后重新安排它以便恢复。

// pause
long timeLeft = 5000 - (new Date().getTime() - taskB.scheduledExecutionTime());
ThreadB taskBpaused = taskB.clone();
taskB.cancel();
timer.purge();
taskB = taskBpaused;

// resume
timer.schedule(taskB, timeLeft, ...);

重要提示:如果任务尚未运行,则无法运行。 Google的文档指出,如果它尚未运行,scheduledExecutionTime()将返回an undefined value,而我无法测试此刻究竟意味着什么。毋庸置疑,如果您不确定它是否已经运行,您需要某种条件来确保该值不是未定义的。