gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 16:02:55 40 4
gpt4 key购买 nike

我将此称为任务:

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 秒过去之前的时间不再计时。然后在稍后的某个时间点,我想恢复它。

我怎样才能实现这个目标?

最佳答案

最简单的解决方案是简单地复制 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 ,我目前没有能力测试这到底意味着什么。不用说,如果您不确定它是否已经运行,您将需要某种条件来确保该值不是未定义的。

关于java - Android 中是否有可能暂停和恢复 TimerTask?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3375434/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com