我正在调用这个任务:
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秒的时间不再运行。然后在稍后的时间点,我想恢复它。
我怎样才能实现?
答案 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,而我无法测试此刻究竟意味着什么。毋庸置疑,如果您不确定它是否已经运行,您需要某种条件来确保该值不是未定义的。