Я написал приложение, которое должно просыпаться один раз в минуту, пока оно работает с использованием широковещательного приемника, объявленного в манифесте и запускаемого AlarmManager.setAlarmClock(), поскольку это единственное точное решение, которое, похоже, работает на Android 7+ без ограничений на повторение сигналов тревоги.
Мне кажется, что я следил буквально за всеми подсказками в сети (и особенно SO), чтобы мое приложение работало, но рано или поздно оно переходит в состояние дремать или спячка, хотя я внес свое приложение в белый список, используя Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS, и я использую блокировка пробуждения внутри приемника при планировании следующего сигнала тревоги.
Процесс, отвечающий за "замораживание" моего приложения, - "пепел". Где я могу найти дополнительную информацию об этом процессе? Это специфично для ОС производителя?
Как отключить режим ожидания / гибернации моего приложения? Я не могу, хоть убей, заставить это проклятое приложение продолжать работать непрерывно. Любая подсказка приветствуется!
Используемое устройство - Huawei P8 lite 2017 с Android 7.0. Поскольку исходный код стал довольно сложным, к тому же я думаю, что все делаю правильно с точки зрения кода, я не публикую здесь код прямо сейчас. (Однако я предоставлю соответствующие образцы кода по запросу.)
Речь идет, кажется, об общей проблеме самой ОС, поскольку я читал о многих людях, которым это не помогло. (Что нелепо ... торговать возможностью устанавливать точные таймеры для небольшого увеличения времени автономной работы. ПОЧЕМУ, Google?)
Следующий вывод каталога показывает действие «пепла»; в этом случае оно заморозило мое приложение примерно на полчаса, после того как оно нормально проработало примерно полчаса. Думаю, когда я снова включил и разблокировал телефон, приложение снова продолжило работать.
06-06 22:37:33.122 I/ash ( 1772): de.paulwilhelm.limon send broadcast: notify package: de.paulwilhelm.limon, pid: -1
06-06 22:37:33.122 I/ash ( 1772): screen off de.paulwilhelm.limon H to D, reason:bc_notify_
06-06 22:37:33.122 I/ash ( 1772): de.paulwilhelm.limon { hibernation duration=60527 } transition to: doze reason:bc_notify_
06-06 22:37:33.155 I/ash ( 1772): Unfreeze de.paulwilhelm.limon OK !
06-06 22:37:33.160 I/ash ( 1772): unproxy de.paulwilhelm.limon broadcast OK !
06-06 22:37:33.167 I/ash ( 1772): Unpending de.paulwilhelm.limon alarm OK !
06-06 22:37:33.169 I/ash ( 1772): unproxy app:de.paulwilhelm.limon,uid:10118,result:true
06-06 22:37:33.175 I/ash ( 1772): front app: de.paulwilhelm.limon goes to H
06-06 22:37:33.176 I/ash ( 1772): ignore front app :de.paulwilhelm.limon screen off:523907ms
06-06 22:37:33.176 I/ash ( 1772): de.paulwilhelm.limon is front app
06-06 22:37:33.176 I/ash ( 1772): ignore front app :de.paulwilhelm.limon screen off:523907ms
06-06 22:37:33.179 I/ash ( 1772): de.paulwilhelm.limon { doze duration=10 } transition to: hibernation reason:
06-06 22:37:33.180 I/ash ( 1772): Pending de.paulwilhelm.limon alarm OK !
06-06 22:37:33.181 I/ash ( 1772): proxy de.paulwilhelm.limon broadcast OK !
06-06 22:37:33.183 I/ash ( 1772): proxy app:de.paulwilhelm.limon,uid:10118,result:true
06-06 22:37:33.184 I/ash ( 1772): Freeze de.paulwilhelm.limon OK !
06-06 22:37:33.185 I/ash ( 1772): add listener de.paulwilhelm.limon net packet OK !,uid:10118
06-06 22:37:33.188 I/ash ( 1772): has wakelock app: de.paulwilhelm.limon, uid: 10118
Сделаю. Но что я могу сделать на этом самом устройстве? Можно ли настроить "ash" как root? Есть ли ресурсы, как исправить эту штуку? - Я также пробовал использовать Lineage OS 14.1, но BLE там не работал, поэтому теперь я снова застрял на стандартном ПЗУ.
«Но что я могу сделать на этом самом устройстве?» - Понятия не имею, извини.
Итак, наконец, у меня было достаточно репо, чтобы оставить комментарий. Мой ответ был удален, но я хочу предоставить эту ссылку forum.xda-developers.com/mate-9/how-to/…, которую я нашел для этой проблемы. Может быть, это в чем-то вам поможет.
Я как пользователь HUAWEI тоже перенес этот процесс "пепел" и режим гибернации. Что определенно расширено (или, вероятно, даже решено), так это использование службы переднего плана (что, вероятно, именно то, что вы делаете), повышающее важность вашего уведомления до IMPORTANCE_MAX и самое главное, позволяющее HUAWEI управлять мощностью вашего приложения вручную, перейдя в Настройки - > Батарея -> Запуск. Найдите там свое приложение, щелкните по нему, откройте все параметры (включая «Запуск в фоновом режиме») и позвольте ему сказать «Управлять вручную».
Это решило мою проблему, надеюсь, она решит и вашу.
Я сделал то же самое, что и вы упомянули «Управление вручную» и IMPORTANCE_MAX, но у меня все еще проблема с моим приложением. Huawei переводит приложение в спящий режим на 3000 мс. Это журнал, который я вижу до того, как мой обработчик службы приложений перестает работать: 2020-03-27 12:25:10.405 2172-2197/? I/AppFastHibernation: fast H duration: 3000 reason: start activity Вы нашли какое-нибудь решение? для этой проблемы?
«Используемое устройство - Huawei P8 lite 2017 с Android 7.0» - попробуйте другие устройства, особенно с менее модифицированными версиями Android. Huawei, в частности, довольно печально известна своими более агрессивными энергосберегающими функциями.