Диспетчер работы на китайских ПЗУ, таких как Xiaomi и OPPO, при оптимизации батареи увеличивает запланированную задержку работы на несколько часов. - PullRequest
0 голосов
/ 25 января 2020

Диспетчер работы на китайских ПЗУ, таких как Xiaomi и Oppo, при оптимизации работы батареи увеличивают запланированную задержку работы на несколько часов, однако я заметил, что некоторые приложения, такие как life360, могут выполнять запланированные задания без сбоев и без проблем даже при работе от батареи. оптимизация. Я заметил одно отличие: они показывают уведомление каждый раз, когда запускается задание, поэтому будет ли оно отвечать за поддержание приложения активированным оптимизатором батареи?

И я также заметил, что после принудительной остановки это приложение, через 24 часа оно снова заработало, но как это возможно? Может ли кто-нибудь пролить свет на то, что происходит за кулисами, и каким методом они будут пользоваться?

Дайте мне знать, если есть какие-либо дополнительные сведения.

Ответы [ 3 ]

0 голосов
/ 25 января 2020

WorkManager предназначен для задач, которые отложены , то есть не требуются для немедленного запуска , и необходимы для надежной работы, даже если приложение закрывается или устройство перезагружается. Например,

  • Отправка журналов или аналитики в бэкэнд-сервисы
  • Периодическая синхронизация данных приложения с сервером

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

WorkManager поддерживает два типа работы: OneTimeWorkRequest и PeriodicWorkRequest `.


  1. Так будет ли это отвечать за поддержание приложения оптимизатором батареи?

    A WorkRequest для повторения работы. Эта работа выполняется несколько раз, пока не будет отменена, при этом первое выполнение происходит немедленно или сразу после достижения указанных Ограничений . Следующее выполнение будет происходить в течение интервала периода; обратите внимание, что выполнение может быть отложено, потому что WorkManager подвергается оптимизации батареи ОС, такой как режим ожидания.

  2. Я также заметил, что после принудительной остановки через 24 часа оно снова заработало, но как это возможно?

    См. PeriodicWorkRequest.Builder

    • Создает PeriodicWorkRequest для периодического запуска один раз в течение периода flex каждого интервала. Смотрите схему ниже. Обратите внимание, что гибкие интервалы игнорируются для определенных версий ОС (в частности, API 23). Период сгибания начинается в repeatInterval - flexInterval до конца интервала. Интервал повторения должен быть больше или равен PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS , а интервал изгиба должен быть больше или равен PeriodicWorkRequest.MIN_PERIODIC_FLEX_MILLIS .

0 голосов
/ 25 января 2020

Подобные вопросы лучше всего задавать в прошлом здесь и здесь .

Это также задавалось в системе отслеживания проблем WorkManager: являются китайскими производителями (Huawei, Oppo, Xiaomi ...) поддерживается?

Подводя итог: это известная проблема с некоторыми Android OEM, которые сильно модифицируют эту часть Android для оптимизации батареи. WorkManager ничего не может сделать, чтобы решить эту проблему .

Помимо добавления вашего приложения в белый список, вы действительно можете сообщить о проблеме только:

  • для OEM (в данном случае Xiaomi), чтобы избежать такого рода критических изменений.
  • для Google, чтобы добавить тест в CTS и избежать такого поведения со стороны OEM. Пожалуйста, откройте вопрос здесь , чтобы документировать проблему в Google.

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

0 голосов
/ 25 января 2020

Это известная проблема, и, как прокомментировано в этой другой ошибке на эмитентерах Google, в этих случаях мало что может сделать WorkManager. Если производитель устройства решил изменить запас Android, чтобы принудительно остановить приложение, WorkManager перестанет работать (как и JobScheduler, тревоги, широковещательные приемники и т. Д. c.). Нет способа обойти это. К сожалению, некоторые производители устройств делают это, поэтому в этих случаях WorkManager перестанет работать до следующего запуска приложения. Также вы можете попробовать использовать StartForgoundService (), и до тех пор, пока ваша работа не будет завершена, вы должны показать уведомление в forground.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...