Android ScheduledThreadPoolExecutor立即执行延迟任务

时间:2012-01-07 00:57:21

标签: java android

我有一个后台任务,我使用ScheduledThreadPoolExecutor运行,代码如下。

executor.scheduleWithFixedDelay(new BackgroundSync(), 0, 15, TimeUnit.MINUTES);

BackgroundSync实现了Runnable。

有时从用户事件中我希望延迟事件现在运行而不是15分钟计时器关闭时。

一些要求:

  • 一次只能运行一个“BackgroundSync”
  • 根据用户事件,我应该能够在没有运行后立即安排BackgroundSync。

2 个答案:

答案 0 :(得分:2)

scheduleWithFixedDelay返回ScheduledFuture。调用它时,将其存储在某个位置,如果要立即执行,请检查它是否存在。然后,您可以使用cancel方法取消预定的未来,并再次安排runnable立即执行。

答案 1 :(得分:2)

Kabuko的解决方案可能和你一样好,但有一个障碍。

如果任务在开始之前被取消,则cancel()方法返回true,如果任务已经运行,则false返回cancel()。问题是如果任务当前正在运行,true将返回{{1}}。因此,您需要实现一些其他机制来决定是否重新提交任务。