Как работает служба геолокации?

#android #service #geolocation

#Android #Обслуживание #геолокация

Вопрос:

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

-Возможно ли, чтобы служба работала до тех пор, пока пользователь не остановит ее (кнопка запуска / остановки)?. Насколько я понимаю, служба привязана к активности, которая может быть отключена Android в любое время…

-Каков наилучший способ отслеживания местоположения с точки зрения времени автономной работы? Это то же самое, что 1 / создавать, получать обновления и удалять LocationManager каждые x секунд и 2 / создавать один раз LocationManager и устанавливать minTime аргумент в LocationManager.requestLocationUpdates на x?

Спасибо

Ответ №1:

1) Да, можно поддерживать работу службы до тех пор, пока пользователь (или во время нехватки ресурсов, система) не убьет ее. Служба, которая должна выполняться таким образом, должна переопределять

 onStartCommand() 
  

метод и запуск через

 Context.startService() 
  

Вы имеете в виду службы, которые переопределяют onBind() и запускаются через

 context.bindService()
  

Прочитайте документацию по сервису, она содержит описание жизненных циклов обоих видов сервисов.

2) Рето Мейер написал здесь одно из лучших руководств по передовым методам определения местоположения. Проверьте это

Комментарии:

1. Если действие, привязанное к службе, уничтожается системой, то служба уничтожается, верно?

2. Служба отключается как побочный эффект утечки объекта binder. Так что да, по сути, если служба привязана к активности, она будет отключена. Однако, если служба была запущена с помощью Context.startService(), то ее жизненный цикл не привязан к действию или чему-либо еще.

3. Вы упомянули, что служба привязана к действию. Не совсем. Любой класс, имеющий доступ к объекту контекста, должен иметь возможность запускать связанную службу. Да, наиболее разумное использование — это действия, но это не единственное место, где это возможно.