Прерывание службы Android - PullRequest
       0

Прерывание службы Android

2 голосов
/ 06 сентября 2011

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

Мой сервис работает последовательно, чего я и хочу, но иногда я обнаруживаю, что сервис остановлен.В моем манифесте я установил android:configChanges="orientation|keyboardHidden" для своего основного действия, чтобы оно не создавалось заново при каждом изменении ориентации, но нужно ли это делать для каждого действия и услуги?

Кроме того, потенциально этооперационная система убивает мой сервис.В таком случае, есть ли способ заставить систему пропустить мой сервис или автоматически перезапустить сервис через определенное количество минут?

Спасибо!

1 Ответ

2 голосов
/ 07 сентября 2011

Мой сервис работает последовательно, что я и хочу

Ваши пользователи могут не соглашаться.

но нужно ли это делать для каждого действия иservice?

Вы, вероятно, не должны делать это для любого компонента.В основном это происходит в тех случаях, когда пользовательский интерфейс слишком сложен для успешного повторного рендеринга в новом действии (например, в некоторых играх, воспроизведении видео) или когда действие также привязано к определенной ориентации.В любом случае, для сервисов нет атрибута android:configChanges.

потенциально это операционная система, убивающая мой сервис

Операционная система отключит пропущенные сервисы, такие как ваш,для предотвращения чрезмерного разряда батареи.

есть ли способ заставить систему игнорировать мой сервис

Вы можете использовать startForeground().

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

Возврат START_STICKY (или, возможно, START_REDELIVER_INTENT) из onStartCommand().

Еще лучше было бы пересмотреть ваш подход.Отслеживание местоположения - особенно GPS - является существенным расходом батареи.Существует довольно мало приложений, которые должны постоянно отслеживать местоположение в фоновом режиме.Если вам действительно нужны исправления местоположения очень часто (например, каждые 15 минут), используйте AlarmManager, чтобы запустить службу, чтобы получить исправление, а затем вызовите службу stopSelf(), чтобы уйти до следующего сигнала тревоги.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...