2013-02-12 3 views
2

У меня есть служба в приложении для Android, которая должна продолжить прослушивание обновлений местоположения после выхода пользователя из приложения (последствия этого в автономном режиме - это отдельный вопрос).Жизненный цикл службы в Android

Я не уверен, что я правильно понял жизненный цикл сервиса в Android, описанный на этой странице:

http://developer.android.com/reference/android/app/Service.html

Я считаю, если она возвращает START_STICKY в OnStart() метод, то служба будет продолжать работать после выхода основного приложения независимо от того, работает ли служба в своем собственном процессе. Если служба работает в том же процессе, что и остальная часть приложения, и я правильно понял, процесс основного приложения сохраняется в живых после выхода приложения, просто для запуска этой службы. Когда приложение запустится снова, оно будет работать в том же процессе, что и служба, которая все еще работает. Если система становится низкой в ​​памяти, Android может решить убить эту службу.

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

Правильно ли я понял?

+1

Я понимаю, что вы приняли ответ, но из любопытства, как ваша служба «прослушивание» для обновления местоположения? – Squonk

+1

Просто используя LocationListener, как описано здесь: http://developer.android.com/training/basics/location/currentlocation.html Являются ли мои мысли по-прежнему правильными? – Froskoy

+1

Для этого вам не нужно настраивать AsyncTask или фоновый поток. Также понятно. Но если вы используете это в службе, андроид O/S/может убить вас, включая сервис и eventlistener. Вот почему использование Intent + IntentService + AlarmManager - лучшая практика. – Timmetje

ответ

3

Вы поняли правильно.

Если система не работает в памяти, Android может решить убить эту службу.

Если вы хотите, чтобы это было постоянным, вы можете создать постоянное обслуживание (но оно должно быть системным приложением/службой).

Пожалуйста, используйте AlarmManager и IntentService, поэтому ваша служба не должна быть в памяти, кроме случаев, когда она делает значимую работу. Это также означает, что Android вряд ли сможет убить ваш сервис, пока вы находитесь в памяти, и пользователи вряд ли убивают ваш сервис, потому что считают, что вы тратите впустую память.

Для вашего местоположения Listener:

Используйте Местоположение Слушатель реализован в службе.

Начните слушать GPS при запуске службы и отключите приемник GPS, когда служба остановится.

Запустите эту услугу, если вы хотите слушать GPS (каждые 10 минут, например).

Это чище, чем обслуживание, которое вы пытаетесь постоянно запускать и проверяете изменения местоположения.

Во-вторых, я считаю, что нормально запускать прослушиватель местоположения, слушая GPS-обновления в том же процессе и, фактически, тот же поток, что и остальная часть приложения, и он не будет блокироваться при ожидании обновлений с GPS.

Для этого вам не нужно настраивать AsyncTask или фоновый поток. Также понятно.

+1

Спасибо. Что вы подразумеваете под «настойчивым»? – Froskoy

+1

Значение никогда не выключается, если вы этого не хотите. – Timmetje

+1

Но это все равно, используя IntentService и AlarmManager? Остается ли все приложение в памяти после выхода из него только для запуска службы? – Froskoy

0

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

enter image description here

Смежные вопросы