Попытка запустить уже запущенную службу в фоновом потоке

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

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

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

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


person Ananth    schedule 06.07.2019    source источник


Ответы (1)


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

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

person Gabe Sechan    schedule 06.07.2019