Как получать и обрабатывать изменения местоположения, когда действие приостановлено
Я ищу немного советов по дизайну приложений.
У меня есть приложение, которое подключается к Службам определения местоположения Google и отслеживает полученные координаты местоположения. Они отображаются как путь в пользовательском интерфейсе.
Когда экран истекает и гаснет, то это Activity
будет, конечно, выключен в соответствии с обычным жизненным циклом Активности.
Однако - я хочу записать координаты, возвращающиеся в каждом onLocationChanged
событие от Location Services, но, конечно же, Activity
сделал паузу, поэтому он не может этого сделать.
Я не хочу, чтобы в "Манифесте" экран заглушался (и, следовательно, Activity
никогда бы не остановился) Хотя я полагаю, что он все равно остановится, если, скажем, будет принят телефонный звонок и т. Д.
Мое решение было бы начать IntentService
в одном из Activity
приостановка событий (либо onPause
, onStop
или же onSaveInstanceState
) получать обновления местоположения, а затем, когда Activity
перезапускает, собирает данные из Сервиса и закрывает Сервис.
Будет ли это эффективным и правильным способом достижения этого, или есть какой-то черный арт Android, о котором я не знаю? Если это так, IntentService
правильный способ сделать это (или я должен использовать Service
)?
2 ответа
Чтобы связать свободные концы, я добавлю свой собственный ответ на это, теперь я кое-что реализовал.
Мое решение в конце концов не было IntentService
, Это потому, что я думал, что IntentService
будет рассматривать его работу как фактическую LocationService
и как только эта работа будет завершена, она закроется, а не будет ждать LocationService
"свистит".
Поэтому я реализовал нормальный Service
но я связал это с призванием Activity
, Я также настроил обратный вызов на Activity
, Таким образом, когда был получен "пинг", я мог обработать его и передать данные напрямую Activity
, Так же Service
будет оставаться в живых, пока привязка была на месте. Я очищаю связующее, когда Activity
уничтожен
Это работало отлично.... ОДНАКО
Затем я обнаружил, что причина того, что LocationService
"пинги" не обрабатывались в Activity
потому что я отключал GoogleAPIClient
когда Activity
onStop
назывался. Удалив это, Activity
обработал 'pings' даже в остановленном состоянии, поэтому нет Service
все равно требовалось
Поэтому правильный ответ на этот вопрос... Activity
следует продолжить обработку в фоновом режиме (если только он не уничтожен в целях управления памятью), поэтому убедитесь, что вы не останавливаете вещи в своих обработчиках 'shutdown' onPause
onStop
и т.д. Тогда вы не будете тратить время на написание услуг, как я!
Вероятно, нормальная служба, которая перезапускается диспетчером аварий, является лучшей идеей.