Как получать и обрабатывать изменения местоположения, когда действие приостановлено

Я ищу немного советов по дизайну приложений.

У меня есть приложение, которое подключается к Службам определения местоположения 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 когда ActivityonStop назывался. Удалив это, Activity обработал 'pings' даже в остановленном состоянии, поэтому нет Service все равно требовалось

Поэтому правильный ответ на этот вопрос... Activity следует продолжить обработку в фоновом режиме (если только он не уничтожен в целях управления памятью), поэтому убедитесь, что вы не останавливаете вещи в своих обработчиках 'shutdown' onPauseonStop и т.д. Тогда вы не будете тратить время на написание услуг, как я!

Вероятно, нормальная служба, которая перезапускается диспетчером аварий, является лучшей идеей.

Другие вопросы по тегам