Android 9: настройка фонового ограничения приложения - PullRequest
3 голосов
/ 14 апреля 2019

Я работаю над приложением музыкального проигрывателя и замечаю странное поведение на устройствах Android 9, когда пользователь включает настройку «Фоновое ограничение» (Настройки -> Приложения -> [Имя приложения] -> Батарея -> ФонОграничение).

Вот что я делаю: я запускаю службу музыкального проигрывателя, вызывая Service.startService (), затем устанавливаю его на передний план с помощью Service.startForeground (), пока мое приложение находится на переднем плане.

Вот что я вижу, когда включено «Фоновое ограничение»: 1) Service.startForeground () не будет публиковать уведомление 2) Моя служба переднего плана будет убита ОС через минуту после того, как мое приложение перейдет вbackground

Вот что я вижу в журналах: 1) «Service.startForeground () не разрешен из-за ограничения bg» при вызове Service.startForeground () 2) «Остановка службы из-за простоя приложения», когда мое приложениеавтоматически убивается операционной системойзнание (постоянное уведомление);действительно ли настройка «Фоновое ограничение» предназначена для запрета всей фоновой активности?

Интересная находка: Глядя на пример проекта Google «Универсальный музыкальный плеер» на GitHub, я заметил, что их пример проекта не уничтожается, как мое приложениеявляется.После копания я заметил, что это связано с тем, что они привязываются к своему сервису и никогда не отменяют привязку в Activity.onPause ().Согласно документам Google, на связанные сервисы не распространяются те же фоновые ограничения.Это действительно решение моей проблемы?Кажется немного хакерским / хрупким.

Заранее спасибо за помощь!

1 Ответ

0 голосов
/ 08 мая 2019

Вот что я нашел:

  • «Фоновое ограничение» (или «Разрешить фоновую активность» на некоторых устройствах) предназначено для остановки ВСЕХ фоновых операций независимо от того, вызвала ли ваша служба setForeground ()

  • Обойти эту настройку невозможно. Вы не можете программно отключить его. Единственный вариант - программно проверить, включен ли он с помощью ActivityManager.isBackgroundRestricted (), и отобразить всплывающее окно, информирующее ваших пользователей о том, как отключить этот параметр

  • Пример проекта Google Universal Music Player на GitHub работает (на момент написания этого ответа) только потому, что привязка службы не освобождается, когда основное действие приостановлено. Служба примера проекта, однако, прерывается, когда основная активность собирается «мусором» (обычно 30–45 минут в зависимости от устройства).

...