Вторник, 27 июля, 2021

Как запретить Huawei и Android убивать приложения в фоновом режиме?

ОБНОВЛЕНИЕ: Похоже, что на EMUI 9+ (Android P +) компания Huawei представила новое приложение-убийцу задач под названием PowerGenie, которое убивает все, что не занесено в белый список от Huawei, и не предоставляет пользователям никаких параметров конфигурации. Смотрите ниже, как удалить его.

Традиционно Huawei и его надстройка Android под названием EMUI относятся к наиболее проблемным на рынке в отношении нестандартных ограничений фонового процесса. Для этих расширений нет API и документации. В настройках по умолчанию фоновая обработка просто не работает должным образом, а приложения, работающие в фоновом режиме, вылетают.

В некоторых версиях EMUI (мы знаем о EMUI 4 в и у нас есть некоторые отчеты о EMUI 5, а теперь и о последнем EMUI 9) никакие доступные пользователю настройки не могут помешать системе прервать фоновую обработку дольше, чем 60 минут. Это делает злая пользовательская служба под названием HwPFWService (а в EMUI 9 это называется PowerGenie), разработанная и поставляемая вместе с EMUI компанией Huawei.

Решение для пользователей

Телефоны Huawei обычно имеют несколько механизмов энергосбережения. Кроме того, у вас может не быть PowerGenie на вашем телефоне, но ваши приложения все равно могут быть убиты другим механизмом.

Самый простой способ помочь приложению в борьбе с убийцами фоновых процессов – запретить оптимизацию батареи в стандартных настройках. Это не гарантирует, что приложение будет всегда работать, но отчасти поможет.

Чтобы проверить, на сколько агрессивно смартфон работает с приложениями в фоне, нужно воспользоваться материалом: Как проверить работу приложений в фоновом режиме на Android.

Стандартная оптимизация батареи в Android

Откройте «настройки», найдите пункт оптимизации батареи. Коснитесь маленького перевернутого треугольника рядом с надписью «Не разрешать», коснитесь «Все приложения», найдите и коснитесь своего приложения и выберите «Не разрешать».

Некоторые устройства на EMUI 8, 9 и 10 (Huawei P20, Huawei P20 Lite, Huawei Mate 10…)

Для корректной работы приложений в фоновом режиме, на некоторых устройствах с EMUI, нужно включить ручное управление в настройках.

«Настройки телефона» > «Батарея» > «Запуск приложений», а затем установите для своего приложения «Управление вручную» и убедитесь, что все переключатели включены.

Эта функция есть не во всех смартфонах, и может иметь другое название.

Нужно отключить опцию «Управлять всем автоматически». А так же для каждого важного приложения включить все переключатели ручного управления.

Также для уверенности, что фоновые процессы не будут завершаться без вашего ведома, может потребоваться удаление PowerGenie, как описано ниже.

Устройства EMUI 9+

Huawei чрезвычайно изобретательна в взломе приложений на своих устройствах. Похоже на Android Pie, в дополнение ко всем нестандартным мерам управления питанием, описанным ниже, они внедрили новую сборку приложений-убийц прямо в EMUI 9.

Она называется PowerGenie, и вы не можете добавлять пользовательские приложения в их предварительно определенный белый список. Это означает, что нет другого способа исправить надлежащую функциональность приложения на Huawei, кроме удаления PowerGenie.

К сожалению, это системное приложение, которое можно полностью удалить только с помощью ADB (Android Debug Bridge).

Вам нужно:

  1. Установите ADB на свой компьютер
  2. Подключите телефон с помощью кабеля для передачи данных
  3. Включите параметры разработчика
  4. Включите отладку по USB в параметрах разработчика на вашем телефоне
  5. Выполните следующие команды на вашем компьютере:
adb shell pm uninstall -k --user 0 com.huawei.powergenie 
adb shell pm uninstall -k --user 0 com.huawei.android.hwaps
adb shell pm stopservice hwPfwService

Мы еще не подтвердили это, но, возможно, вы можете просто отключить PowerGenie в «Настройки телефона» > «Приложения», но этот параметр необходимо применять каждый раз при перезагрузке устройства.

Устройства EMUI 6+ (и некоторые устройства EMUI 5)

  • Настройки телефона > Расширенные настройки > Диспетчер батареи > План электропитания установлен на Производительность (Phone settings > Advanced Settings > Battery manager > Power plan is set to Performance)
  • Настройки телефона > Расширенные настройки > Диспетчер батареи > Защищенные приложения — выберите приложение как Защищенное (Phone Settings > Advanced Settings > Battery Manager > Protected apps – check for your app as Protected)
  • Настройки телефона> Приложения> Ваше приложение> Батарея> Энергосберегающая подсказка [x] и Продолжить работу после выключения экрана [x] (Phone Settings > Apps > Your app > Battery > Power-intensive prompt [x] and Keep running after screen off [x])
  • Настройки телефона > Приложения > Дополнительно (внизу) > Игнорировать оптимизации > Нажмите Разрешено > Все приложения > Найдите приложение в списке и выберите Разрешить (Phone settings > Apps > Advanced (At the bottom) > Ignore optimisations > Press Allowed > All apps > Find your app on the list and set to Allow)

Huawei P9 Plus

Настройки телефона > Приложения > Настройки > Специальный доступ > Игнорировать оптимизацию батареи > выберите Разрешить для вашего приложения (Phone settings > Apps > Settings > Special access > Ignore battery optimisation > select allow for your app)

Huawei P20

Настройки телефона> Аккумулятор> Запуск приложения, а затем установите для своего приложения «Управление вручную» и убедитесь, что все включено (Phone settings > Battery > App launch and then set your app to “Manage manually” and make sure everything is turned on)

Huawei Honor 9 Lite, Huawei Mate 9 Pro

Настройки телефона > Аккумулятор > Запустите, а затем установите приложение в «Управление вручную» и убедитесь, что все включено (Phone settings > Battery > Launch and then set your app to “Manage manually” and make sure everything is turned on).

В EMUI 4 это не работает

Решение для разработчиков

EMUI 4

На EMUI 4 Huawei реализовал злой сервис под названием HwPFWService. В вашем adb logcatвы можете увидеть сообщение как:

[ 05-25 18:10:17.167 4230:16683 D/PFW.HwPFWAppWakeLockPolicy ] getUidWakeLock uid: 10185 wakelock >= 10 mins

[ 05-25 18:10:17.249 4230:16683 W/PFW.HwPFWAppWakeLockPolicy ] uid: 10185 wakelock > 60 mins

[ 05-25 18:10:17.249 4230:16683 D/PFW.HwPFWAppWakeLockPolicy ] force stop abnormal wakelock app uid: 10185

Хорошей новостью является то, что для того, чтобы не убить себя или другие сервисы Huawei / Honor, перед тем как убить приложение, hwPfwService просматривает тег wakelock и, если тег является одним из жестко закодированных белых списков, он не убивает приложение , Белые теги Wakelock: «AudioMix», «AudioIn», «AudioDup», «AudioDirectOut», «AudioOffload» и «LocationManagerService».

Вот как вы можете обойти это в коде:

String tag = "com.my_app:LOCK";

if (Build.VERSION.SDK_INT == Build.VERSION_CODES.M && Build.MANUFACTURER.equals("Huawei")) { tag = "LocationManagerService"; }

PowerManager.WakeLock wakeLock = ((PowerManager) getSystemService(Context.POWER_SERVICE)).newWakeLock(1, tag); wakeLock.acquire();

Пожалуйста лайк, репост

Это тоже интересно

РЕКОМЕНДУЕМ

Интересное

РЕКОМЕНДУЕМ