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

Я пытаюсь поддерживать непрерывный сервис, пока пользователь не закрывает приложение.

Я использую метод startService() метода onCreate() моего основного действия и stopService() в onDestroy().

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

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

Ответ 1

Установите атрибут ниже в теге службы в файле манифеста,

<service android:name="service" android:stopWithTask="true"/>

добавив, что при удалении задачи вызовет ondestroy() службы (приложение закрыто из списка последних приложений).

Ответ 2

Я имею в виду намеренное приложение. После того, как пользователь проверит приложение на экране "последние приложения".

Это не "закрытие приложения", с точки зрения Android. Это "удаление задачи" (или иногда "остановка задачи" - Google не очень согласуется с терминологией).

При удалении задачи ваш сервис следует называть с onTaskRemoved(). Однако это должно быть одновременно, когда пользователь вручную удаляет задачу через обзорный экран (список a.k.a., список недавних задач), и когда задача, естественно, исчезает на Android 4.4 и ниже, потому что задача слишком старая.

Ответ 3

Начните с добавления андроида: configChanges node в свой манифест Activity node для остановки активности перезапуска при повороте устройства.

android:configChanges="keyboardHidden|orientation"

Теперь, чтобы обнаружить закрытие приложения, подумайте, как пользователь может закрыть приложение вручную. В android, нажав кнопку "Назад" или кнопку "домой". Поэтому поставьте прослушиватель событий для кнопки "Назад" и "Дом" и завершите работу службы.