2014-10-01 4 views
2

У меня есть ExecutorService:Android, Java: ExecutorService выполнить после завершения работы

private final ExecutorService listenDataExecutorService = 
           Executors.newSingleThreadExecutor(); 

В этом случае мне нужен душеприказчик прекратить делать свою работу. Для этого я звоню listenDataExecutorService.shutdown();

Затем через некоторое время мне понадобится этот исполнитель, чтобы выполнить эту работу еще раз. Но когда я звоню listenDataExecutorService.execute() исключение бросается.

Как выполнить новую задачу для исполнителя после shutdown?

ответ

3

Как только служба исполнителя отключена, ее нельзя активировать. Создать новую услугу ИСПОЛНИТЕЛЬ для перезапуска выполнения:

listenDataExecutorService = Executors.newSingleThreadExecutor(); 

(Вы должны были бы упасть модификатор final, хотя.)

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

+0

Есть ли способ очистить текущие задачи исполнителя, кроме «shutdown»? – Jim

+0

Если вы используете ThreadPoolExecutor, у вас есть операция удаления (Runnable). – aioobe

+0

Думая об этом немного больше, я предлагаю вам создать службу более высокого уровня с помощью методов start/pause/resume/stop, которые, в свою очередь, будут управлять внутренним сервисом исполнителя. – aioobe

0

Сначала вы должны удалить final модификатор уровня доступа для воссоздания ExecutorService на последнем этапе. final модификатор не позволяет вам изменить ссылку ExecutorService позже во время повторной инициализации.

В том же случае мне нужен исполнитель, чтобы он не выполнял свою работу. Для этого я называю listenDataExecutorService.shutdown();

Вы должны назвать три метода в правильной последовательности для выключения ExecutorService: shutdown, awaitTermination, shutdownNow

Взгляните на ниже сообщение:

How to properly shutdown java ExecutorService

Тогда через некоторое время мне нужен этот исполнитель, чтобы снова выполнить эту работу. Но когда я вызываю listenDataExecutorService.execute() исключение.

Как выполнить новую задачу для исполнителя после завершения работы?

Перед тем, как позвонить execute на этой ExecutorService, что услуга не должна быть в состоянии shutdown. Убедитесь, что ExecutorService находится в надлежащем состоянии, чтобы принимать задачи => Ваш код приложения должен правильно обращаться с «выключение» и «воссозданием» из ExecutorService.

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