2010-02-10 2 views
0

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

Пользователь может иметь 1 или более загрузок в любой момент времени, все в своем потоке, которым управляет сервис.

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

Это работает нормально, если нет ничейных нитей, которые еще не завершены (это может произойти, если интернет-соединение неактивно и т. Д.).

Как я мог управлять этим? Как я могу остановить все потоки, поскольку у меня нет ссылки на них ... или каким-то образом команду андроида остановить службу после того, как все потоки завершены, и мое приложение закрыто?

+0

Вы пытались использовать Boolean Flags и устанавливали их в true, когда загрузка закончилась, и только остановите службу, если для всех флагов установлено значение true? –

+0

Нет, я не пробовал это – jax

ответ

1

Не разрезать резьбы при загрузке. Отправлять задания в рабочую очередь (например, LinkedBlockingQueue) и отключить пул потоков. Сделайте эту очередь очередью приоритетов, и вы можете организовать отправку заданий в этой очереди, чтобы сообщить фоновым потокам остановиться после завершения их текущей загрузки.

+0

Я действительно использовал Executors.newCachedThreadPool(), но ваш ответ помог мне открыть этот замечательный класс – jax

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