Ответ 1
Установите атрибут ниже в теге службы в файле манифеста,
<service android:name="service" android:stopWithTask="true"/>
добавив, что при удалении задачи вызовет ondestroy()
службы (приложение закрыто из списка последних приложений).
Я пытаюсь поддерживать непрерывный сервис, пока пользователь не закрывает приложение.
Я использую метод startService()
метода onCreate()
моего основного действия и stopService()
в onDestroy()
.
Теперь у меня проблема, потому что кажется, что мое основное действие умирает и воссоздается при повороте устройства или при выключении экрана.
Как я могу остановить свою службу только тогда, когда пользователь останавливает приложение вручную?
Установите атрибут ниже в теге службы в файле манифеста,
<service android:name="service" android:stopWithTask="true"/>
добавив, что при удалении задачи вызовет ondestroy()
службы (приложение закрыто из списка последних приложений).
Я имею в виду намеренное приложение. После того, как пользователь проверит приложение на экране "последние приложения".
Это не "закрытие приложения", с точки зрения Android. Это "удаление задачи" (или иногда "остановка задачи" - Google не очень согласуется с терминологией).
При удалении задачи ваш сервис следует называть с onTaskRemoved()
. Однако это должно быть одновременно, когда пользователь вручную удаляет задачу через обзорный экран (список a.k.a., список недавних задач), и когда задача, естественно, исчезает на Android 4.4 и ниже, потому что задача слишком старая.
Начните с добавления андроида: configChanges node в свой манифест Activity node для остановки активности перезапуска при повороте устройства.
android:configChanges="keyboardHidden|orientation"
Теперь, чтобы обнаружить закрытие приложения, подумайте, как пользователь может закрыть приложение вручную. В android, нажав кнопку "Назад" или кнопку "домой". Поэтому поставьте прослушиватель событий для кнопки "Назад" и "Дом" и завершите работу службы.