Остановка фоновой службы Android при запуске других приложений

В настоящее время я пытаюсь сделать приложение для Android, которое никогда не заканчивается (перезапускается, когда зависает / останавливается / ударил / убил и т.д.) для определенного использования.

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

Мое приложение хорошо реагирует на мой голос (показывает тост), когда на нем не так много новых приложений. Но когда некоторое время летит или есть 3~4 запущенных приложения поверх него, оно просто зависает (не отвечает на мой голос).

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

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

Спасибо:)

1 ответ

Решение

Для андроида не останавливайте сервис вы можете вызвать startForeground()

Однако некоторые сервисы будут пропущены пользователем, если они загадочным образом исчезнут. Например, приложение музыкального проигрывателя по умолчанию, которое поставляется с Android, использует службу для фактического воспроизведения музыки. Таким образом, пользователь может слушать музыку, продолжая использовать свой телефон для других целей. Служба останавливается только тогда, когда пользователь входит и нажимает кнопку остановки в музыкальном проигрывателе. Если эта служба неожиданно будет закрыта, пользователь может задаться вопросом, что не так.

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

Для этого в onCreate() вашего сервиса (или где бы то ни было в жизни сервиса это имеет смысл), вызовите startForeground(). Это принимает Notification и локально уникальное целое число, так же, как метод notify() в NotificationManager. Это заставляет Уведомление появляться и перемещает сервис в приоритет переднего плана. Позже вы можете вызвать stopForeground(), чтобы вернуться к обычному приоритету.

Другие вопросы по тегам