Есть ли способ предотвратить автоматическое перезапуск моей службы ActivityManager после ее «сбоев»? В некоторых сценариях я насильно убиваю свою службу при выходе из программы, но не хочу, чтобы Android продолжал ее перезапускать.Android: Как предотвратить перезапуск службы после сбоя?
ответ
Ваш сервис может хранить значение в SharedPreferences. Например, вы можете хранить что-то подобное при каждом запуске вашего сервиса: магазин («serviceStarted», 1);
Когда ваше обслуживание прерывается (вы отправляете сообщение для этого), вы переопределяете это значение: магазин («serviceStarted», 0);
Когда при следующем запуске службы он обнаруживает, что значение serviceStarted равно «1», это означает, что ваша служба не была остановлена и она перезапустилась сама. Когда вы обнаружите это, ваша служба может позвонить: stopSelf(); отменить себя.
Для получения дополнительной информации: http://developer.android.com/reference/android/app/Service.html#ServiceLifecycle
Такое поведение определяется возвращаемым значением onStartCommand()
в вашем Service
реализации. Константа START_NOT_STICKY
сообщает Android не перезапускать службу, если она работает, пока процесс «убит». Другими словами:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// We don't want this service to continue running if it is explicitly
// stopped, so return not sticky.
return START_NOT_STICKY;
}
НТН
Хотя это не отмечено как принятое решение, это правильный ответ – scooterman
Это не будет работать, если есть выдающиеся намерения. У меня есть эта проблема, и вышеупомянутый подход не работает. Возможно, подход ниже - лучшая альтернатива, но я еще не реализовал ее. Попробовали другие подходы, предложенные в переполнении стека, но они еще не преуспели. –
@BrianReinhold Ваша проблема звучит так, как будто у нее есть определенный поворот в этом вопросе, разместили ли вы свое объяснение в своем случае использования и проблемах, которые вы наблюдали? Мне было бы интересно изучить его больше. – Devunwired
Вот решение, которое я придумал в случае, если это может помочь кому-то еще. Мое приложение все еще перезапускалось даже с START_NOT_STICKY
. Поэтому вместо этого я проверяю, есть ли цель null
, что означает, что служба была перезапущена системой.
@Override
public int onStartCommand(@Nullable Intent intent, int flags, int startId) {
// Ideally, this method would simply return START_NOT_STICKY and the service wouldn't be
// restarted automatically. Unfortunately, this seems to not be the case as the log is filled
// with messages from BluetoothCommunicator and MainService after a crash when this method
// returns START_NOT_STICKY. The following does seem to work.
Log.v(LOG_TAG, "onStartCommand()");
if (intent == null) {
Log.w(LOG_TAG, "Service was stopped and automatically restarted by the system. Stopping self now.");
stopSelf();
}
return START_STICKY;
}
Спасибо !. У меня было требование получить частые обновления местоположения и отправить его на сервер с сервиса. основанный на уведомлении служба переднего плана, но он прекратил получать обновления местоположения, когда приложение закрыто. После двухдневной борьбы я добрался до вашего ответа и изменил ваш код. Перед 'stopSelf()', я настроил перезапуск одной службы с помощью 'AlarmManager' после задержка на 10 секунд.И это сработало очень хорошо, теперь получая обновления местоположения от службы непрерывно. Большое спасибо! – manoj
- 1. Перезапуск службы после фатального сбоя
- 2. предотвратить перезапуск службы в android
- 3. Как предотвратить перезапуск службы в Android?
- 4. Android предотвратить перезапуск активности после startActivity
- 5. Android: перезапуск службы после изменения настроек
- 6. Запускает ли перезапуск службы Android в отдельный процесс автоматически после его сбоя?
- 7. Как предотвратить перезапуск приложения после завершения телефонных звонков в Android?
- 8. Как предотвратить перезапуск службы после того, как активность переместилась из переключателя задач?
- 9. Перезапуск службы в сети Изменение Android
- 10. Как предотвратить работу в очереди после выполнения после сбоя?
- 11. Android: Службы останавливаются и перезапускаются после сбоя активности
- 12. Невозможно предотвратить перезапуск активности
- 13. Как предотвратить перезапуск приложения при использовании пусковой установки после магазина?
- 14. Восстановление/Перезапуск java-демона из-за сбоя
- 15. Перезапуск службы Android в том же состоянии
- 16. Выполнение скриншота и перезапуск браузера после сбоя сценария с CucumberJs
- 17. Автоматический перезапуск после сбоя в Google Container Engine
- 18. Перезапуск службы RPC
- 19. Перезапуск службы в методе onDestroy
- 20. Перезапуск веб-службы
- 21. Перезапуск службы windows
- 22. Android - Восстановить приложение после сбоя
- 23. Как предотвратить повторное перезапуск приложения mod_wsgi django?
- 24. Android - Файл пуст после сбоя
- 25. Обнаружение сбоя службы обнаружения в Android Bluetooth
- 26. Как предотвратить перезапуск активности при изменении ориентации в android?
- 27. Игра начинается снова в android - Как предотвратить перезапуск?
- 28. Перезапуск службы при стартовой деятельности
- 29. Как разблокировать камеру Android после ее сбоя?
- 30. Перезапуск служб на Android
Показать скелетную реализацию услуги. –
Является ли это регулярной услугой или IntentService? –