Зависшие частичные блокировки пробуждения

Частичная блокировка пробуждения — это механизм API PowerManager , который позволяет разработчикам поддерживать работу ЦП после выключения дисплея устройства (будь то из-за тайм-аута системы или нажатия пользователем кнопки питания). Ваше приложение получает частичную блокировку пробуждения, вызывая acquire() с флагом PARTIAL_WAKE_LOCK . Частичная блокировка пробуждения зависает , если она удерживается в течение длительного времени, пока ваше приложение работает в фоновом режиме (никакая часть вашего приложения не видна пользователю). В этом случае разряжается аккумулятор устройства, поскольку оно не позволяет устройству переходить в режимы пониженного энергопотребления. Частичные блокировки следования следует использовать только при необходимости и отпускать, как только в них больше нет необходимости.

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

Обнаружить проблему

Вы не всегда можете знать, что частичная блокировка пробуждения вашего приложения застряла. Если вы уже опубликовали свое приложение, Android Vitals может помочь вам узнать о проблеме.

Android Vitals

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

Определение сеанса батареи зависит от версии платформы.

  • В Android 10 сеанс батареи — это совокупность всех отчетов о заряде батареи, полученных в течение заданного 24-часового периода. Отчет о заряде батареи относится к интервалу между двумя зарядками батареи либо от уровня ниже 20% до выше 80%, либо от любого уровня заряда до 100%.
  • В Android 11 сеанс работы от батареи — это фиксированный 24-часовой период.

Количество отображаемых сеансов батареи является совокупным для всех измеренных пользователей приложения. Информацию о том, как Google Play собирает данные Android Vitals, можно найти в документации Play Console .

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

Устранить проблему

Поскольку блокировки пробуждения могут разрядить аккумулятор устройства, не следует использовать блокировки пробуждения, если есть альтернатива. Документация «Выберите правильный API для поддержания работоспособности устройства» поможет вам найти лучшее решение для вашего приложения.

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

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

  • dumpsys — инструмент, предоставляющий информацию о состоянии системных служб на устройстве. Чтобы просмотреть состояние службы питания, которая включает в себя список блокировок пробуждения, запустите adb shell dumpsys power .

  • Battery Historian — инструмент, который анализирует выходные данные отчета об ошибках Android в визуальное представление событий, связанных с питанием.

{% дословно %} {% дословно %} {% дословно %} {% дословно %}