Попытка запустить уже запущенный сервис в фоновом потоке - PullRequest
0 голосов
/ 06 июля 2019

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

Теперь, после небольшого поиска, я решил начать новый поток в onStart() Сервиса, а не в самой Деятельности. Я не хочу никаких утечек памяти с темой, имеющей ссылку на активность. Я в порядке, когда активность уничтожена.

У меня вопрос, по какой теме onStartCommand() называется? Что произойдет, если я снова попытаюсь запустить Сервис?

Я не очень опытен, когда дело доходит до потоков, пожалуйста, укажите на все, что я пропускаю или ошибаюсь.

1 Ответ

1 голос
/ 06 июля 2019

onStartCommand всегда вызывается в основном потоке. Если вы хотите запустить код в другом потоке, вы должны создать его в своей службе. Службы по умолчанию не создают поток (исключение: IntentService создаст поток и вызовет onHandleIntent из этого потока).

Одновременно существует только один экземпляр Сервиса. Повторный запуск не создаст новый объект Service, но он снова вызовет onStartCommand с новым намерением. Если вы не хотите, чтобы создавались два потока, вы должны предотвратить это сами. Обычно, сохраняя ссылку на поток и не создавая его, если не ноль.

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