0

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

У меня есть приложение, которое подключается к службам геолокации Google и отслеживает координаты местоположения, которые он получает. Они отображаются в качестве пути в пользовательском интерфейсе.

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

Тем не менее - я хочу записать координаты, возвращающиеся в каждое событие onLocationChanged из служб местоположения, но, конечно же, Activity остановился, поэтому он не может этого сделать.

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

Мой решение было бы начать IntentService в одном из Activity приостанавливают событий (либо , onStop или onSaveInstanceState) получить Расположение обновления, а затем, когда перезагрузится Activity, соберите данные из Сервиса и закройте Службу вниз.

Будет ли это эффективным и правильным способом достижения этого, или есть некоторые черное искусство Android, о котором я не знаю? Если да, то есть IntentService правильный способ обойти это (или использовать Service)?

ответ

0

Чтобы связать свободные концы, я добавлю свой собственный ответ на это, теперь я что-то реализовал.

Моим решением в конце было не a IntentService. Это было потому, что я думал, что IntentService рассмотрит его работу как фактическую настройку LocationService, и как только эта работа будет завершена, она будет закрыта, а не будет ждать ожиданий LocationService 'pings'.

Поэтому я внедрил обычный Service, но привязал его к вызову Activity. Я также настроил обратный вызов на Activity. Таким образом, когда был получен «ping», я мог обработать его и передать данные непосредственно на Activity. Кроме того, Service оставался бы в живых до тех пор, пока привязка была на месте. Я очищаю связующее, когда Activity уничтожен.

Это работало отлично .... ОДНАКО

потом я обнаружил, что причина, по которой LocationService «свистит» не были обработаны в Activity был bacause я отсоединением GoogleAPIClient когда ActivityonStop называли. Удалив это, Activity обработал «пинги» даже в состоянии остановки, поэтому в любом случае не требовалось Service.

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

0

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

+0

Не могли бы вы объяснить, почему это лучше? Разве это не просто «сервис», который запускается планировщиком, а не когда он действительно нужен (т. Е. Когда мое приложение приостанавливается)? – SimonH