Как экономить заряд батареи

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

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

Чтобы повысить энергоэффективность приложения, следуйте этим рекомендациям:

  • Дизайн приложения должен быть адаптирован для Wear OS. Оно не должно быть точной копией мобильного приложения.
  • Используйте существующее мобильное приложение для определенных целей. Например, интернет и синхронизация на часах требуют много ресурсов. Подумайте, может ли мобильное устройство выполнять основную работу, а устройство Wear OS – получать изменения в данных.
  • Разрабатывайте сценарии использования для более коротких взаимодействий.
  • Подумайте, какие события Wear OS вы используете и как часто они происходят.
  • По возможности откладывайте выполнение задач в приложении до тех пор, пока часы не будут подключены к зарядному устройству. Это особенно касается задач, связанных с обработкой больших объемов данных, таких как синхронизация данных и организация баз данных.

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

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

Как отслеживать расход заряда батареи

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

adb shell dumpsys batterystats

В библиотеке на GitHub есть парсер статистики батареи, который может быть полезен при выполнении этой команды.

События, влияющие на время работы от батареи

Прежде чем перейти к приложению, давайте рассмотрим, какие события в целом потребляют энергию на устройстве Wear OS.

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

Событие Влияние на время работы от батареи Как устранить проблему
Доступ к сети, включая LTE и Wi-Fi. Очень много Откладывать необязательный доступ к сети до тех пор, пока устройство не будет заряжаться.
Как включить экран и запустить интерактивный режим Высокий Не поощряйте пользователя держать экран включенным дольше, чем необходимо. Поддерживайте режим постоянного отображения, также известный как спящий режим.
Доступ к датчику GPS Высокий Если возможно, дождитесь, пока пользователь запросит доступ к GPS.
Поддерживать высокую загрузку ЦП Высокий Используйте потоки с помощью Jetpack Compose.
Доступ к датчику пульса Средний Используйте время активности процессора при получении обратных вызовов от API датчиков, например при использовании сервисов наблюдения за здоровьем в Wear OS.
Доступ к другому устройству по Bluetooth Средний Не затягивайте сеансы.
Удерживать блокировку пробуждения Средний Сократите количество блокировок спящего режима, создаваемых вручную, и используйте WorkManager.

Минимизируйте время работы экрана

При разработке приложения для Wear OS следуйте этим принципам:

  • Блокировка экрана. По возможности избегайте ее. Чтобы проверить, работает ли функция, отключите параметр Всегда активный дисплей в системных настройках и посмотрите, выключится ли экран в течение заданного времени ожидания.
  • Анимация. Не используйте сложную анимацию. Вместо этого сосредоточьтесь на кратких переходах, чтобы придать презентации более профессиональный вид. В частности, избегайте длинных анимаций и циклов. Если требуется зацикливание, добавьте между циклами паузу, которая по длительности будет не меньше самой анимации.
  • Время работы в спящем режиме. При необходимости поддерживайте всегда включенный режим, например для приложений, связанных с фитнесом. Если вашему приложению требуется постоянно включенный экран, следуйте рекомендациям для спящего режима.

Минимизировать использование ЦП

В приложении для Wear OS следуйте приведенным ниже принципам использования ЦП.

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

Минимизируйте использование блокировок спящего режима

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

В некоторых случаях блокировка спящего режима допустима, например если приложение:

  • Воспроизводит медиаконтент в фоновом режиме.
  • Используется WorkManager или JobScheduler. (Система удерживает блокировку от вашего имени при выполнении задания в фоновом режиме.)

Чтобы провести отладку запретов блокировки локально, используйте инспектор фоновых задач Android Studio, трассировку системы или adb shell dumpsys batterystats. Это позволит вам проверить отдельные случаи длительных запретов блокировки, а также сводные данные об их общем количестве и продолжительности. Сравните количество и продолжительность блокировок, которые удерживает ваше приложение, с шаблонами интерактивного использования приложения:

  • Проверьте, нет ли неожиданных блокировок спящего режима.
  • Если продолжительность больше ожидаемой, подумайте, не заблокирована ли работа из-за какой-либо зависимости, например доступности сети.

Как приложение становится неактивным

Учитывайте, что делает активное приложение, когда происходят ключевые события устройства, например:

  • Экран выключится, и устройство перейдет в спящий режим.
  • Приложение закрывается свайпом.

Для анализа активности в приложении используйте инструменты, описанные в разделах ниже.

Power Profiler

Чтобы открыть Power Profiler, в меню Android Studio выберите View > Tool Windows > Profiler (Вид > Окна инструментов > Профилировщик).

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

Perfetto

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

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

Вы также можете использовать Android CLI, чтобы установить android-profiler навык (android skills add android-profiler), который позволяет агентам ИИ записывать системные трассировки Perfetto из командной строки и анализировать шины питания, блокировки пробуждения и состояния приостановки устройства.

Как анализировать запланированные задания приложения

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

Используйте инспектор фоновых задач в Android Studio (View > Окна инструментов > App Inspection) или запустите adb shell dumpsys jobscheduler и adb shell dumpsys batterystats, чтобы проверить выполнение запланированных заданий и воркеров. Проверьте частоту выполнения и общую продолжительность:

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

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

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

Датчики

Устройства Wear OS оснащены различными датчиками, например GPS. В большинстве случаев вместо прямого взаимодействия с SensorManager следует использовать сервисы наблюдения за здоровьем на Wear OS. Во многих случаях сервисы наблюдения за здоровьем объединяют данные в пакеты, чтобы экономить заряд батареи.

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

adb shell dumpsys sensorservice

Результаты этой команды показывают следующее:

  • Текущие и предыдущие регистрации датчиков.
  • Конфигурация датчика, в том числе пакетная обработка, если она настроена.
  • Недавно выбранные данные.

Как проверить отмену регистрации датчиков

Чтобы проверить, прекращает ли приложение получать данные датчиков, протестируйте следующие сценарии:

  1. Закройте приложение, проведя по экрану.
  2. Коснитесь экрана ладонью. Экран выключится или перейдет в спящий режим.

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

Уровень данных

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

Вот ещё несколько рекомендаций по использованию Data Layer API:

  • Настройте прослушиватель с помощью WearableListenerService, когда приложение будет активным.
  • Не используйте Data Layer API для периодической проверки доступности сопутствующего устройства или приложения. Повторная отправка сообщений активирует радиомодуль и процесс удаленного приложения, что приводит к излишнему расходу заряда батареи. Вместо этого используйте CapabilityClient, чтобы определять доступность и возможности устройства, или отправляйте сообщения только при изменении состояния.
  • Передавайте изменения состояния вместо настройки быстрых обновлений. Эти изменения состояния позволяют устройству Wear OS выполнять локальные вычисления, например определять, когда началась тренировка.

    Передавайте только изменения состояния, которые обновляют интерфейс. Например, если на экране активности отображается только "пробег в километрах" с точностью до одного десятичного знака, не отправляйте изменение состояния в Wear OS каждый раз, когда пользователь продвигается ещё на метр вперед.

Чтобы проанализировать использование Data Layer API в приложении, выполните следующую команду в окне терминала на компьютере разработчика:

adb shell dumpsys activity service WearableService

Результаты выполнения этой команды включают следующее:

  • RpcService. Позволяет узнать, как часто и какие пути вызываются с помощью MessageClient.
  • DataService. Позволяет узнать, как часто элементы данных задаются с помощью DataClient.

Приложения для здоровья и фитнеса

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

Плитки и дополнения

Если ваше приложение поддерживает карточки или дополнения, следуйте этим рекомендациям:

  • Отключите автоматическое обновление или увеличьте частоту обновления до двух часов или более.
  • Для отправки обновлений данных используйте Firebase Cloud Messaging (FCM) или задания, запланированные надлежащим образом. Не допускайте слишком частого обновления, иначе система будет планировать повторные задачи быстрее, чем пользователь или платформа смогут получить доступ к данным, необходимым для выполнения этих задач.
  • Не планируйте работу карточки или дополнения, когда пользователь с ними не взаимодействует.
  • Используйте подходы, ориентированные на офлайн-режим.
  • Используйте одну базу данных для основного приложения, карточек и дополнений. Это также помогает поддерживать согласованность данных в разных интерфейсах.