2012-01-07 2 views
0

У меня есть фоновое задание, которое я запускаю с помощью ScheduledThreadPoolExecutor с таким кодом.Android ScheduledThreadPoolExecutor немедленно выполняет отложенную задачу

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

BackgroundSync реализует Runnable.

Иногда из пользовательского события я хочу, чтобы отложенное событие выполнялось сейчас, а не при выключении 15-минутного таймера.

Некоторые требования:

  • Там должен быть только один «BackgroundSync» работает в то время
  • Основе событие пользователя, я должен быть в состоянии немедленно планировать BackgroundSync, если ее не работает уже.
+0

Как вы различаете, когда запускать отложенную и когда запускать сейчас? На основании чего? –

+0

Чтобы уточнить эту повторяющуюся задачу, вы планируете сразу каждые 15 минут. Однако, если пользователь нажимает на определенную кнопку, мне нужно запустить задачу сразу же, считая ее не запущенной. – bluphoenix

ответ

2

scheduleWithFixedDelay возвращает ЗапланированноеFuture. Когда вы вызываете его, храните его где-нибудь и проверяйте, существует ли он, если вы хотите выполнить немедленное выполнение. Затем вы можете отменить запланированное будущее с помощью метода cancel и запланировать повторное выполнение для немедленного выполнения.

2

Решение Kabuko, вероятно, так же хорошо, как и вы, но есть ловушка.

Метод cancel() возвращает true, если задача была отменена до ее начала, и false, если задача уже выполняется или если ранее он был отменен. Проблема в том, что если задача в данный момент запущена, cancel() вернет true. Таким образом, вам нужно реализовать другой механизм, чтобы решить, следует ли повторно отправить задачу.

+0

Я прочитал андроид java doc Мне интересно, как именно эти будущие объекты работают с повторяющимися задачами. С обычной задачей он представляет выполнение одной задачи потока. Что это значит в моем случае, хотя, если я отменяю, я только отменю текущий прогон? или всю повторяющуюся задачу. – bluphoenix

+0

Задача с расписанием не является повторяющейся задачей - это просто задача, которая будет выполняться ... один раз ... после или после назначенной будущей точки времени. Вам решать, как построить блок «повторяющейся задачи», решить, что вы хотите отменить(), и как его реализовать. –

Смежные вопросы