Оптимизируйте энергопотребление вашего приложения

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

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

Зачем оптимизировать навигационное приложение?

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

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

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

Что потребляет больше всего энергии?

В этом разделе действия в приложении, связанные с высоким энергопотреблением, делятся на две категории:

  • Рендеринг экрана
  • Обновления местоположения

Рендеринг экрана

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

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

Обновления местоположения

Помимо рендеринга экрана, еще два навигационных действия потребляют энергию устройства:

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

И GPS, и сотовая радиосвязь требуют энергозатратных операций запуска: GPS должен найти спутники, а сотовая радиосвязь — установить соединение с вышками. По этой причине они, по сути, работают непрерывно во время навигации, хотя сотовая радиосвязь остаётся активной в течение 20–30 секунд, чтобы минимизировать затраты на запуск. Этими настройками управляет операционная система, и настроить её в приложении не так просто.

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

Оптимизируйте энергопотребление вашего приложения

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

Изменить частоту кадров

Изображение на экране обновляется с частотой, известной как частота кадров. Частота кадров обычно измеряется в кадрах в секунду (FPS). Поскольку рендеринг экрана потребляет много ресурсов центрального или графического процессора, можно снизить частоту кадров для экономии энергии.

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

Дополнительные сведения об изменении частоты кадров см. в разделе Частота кадров в документации для разработчиков Android Media Dev Center.

Хотя вы не можете контролировать, как конечный пользователь настраивает яркость экрана своего устройства или как долго он будет оставаться включенным, вы можете предоставить возможность навигации без карты. Это позволит конечному пользователю выбрать этот вариант для экономии заряда батареи. Например, если водители регулярно работают в одном и том же районе, им может реже требоваться навигация с картой. Навигацию без карты можно включить, указав пункт назначения и запустив навигацию в Navigation SDK, но без отображения карты.

Чтобы скрыть навигационный интерфейс, не добавляйте NavigationView или SupportNavigationFragment или, если вы уже сделали это, удалите код, который их добавляет. Следующий код изменён из демонстрационного приложения Navigation SDK для Android и демонстрирует использование комментариев для удаления кода, добавляющего навигационный интерфейс:

//Obtain a reference to the NavigationFragment
//setContentView(R.layout.activity_nav_fragment);
//mNavFragment = (SupportNavigationFragment)   getSupportFragmentManager().findFragmentById(R.id.navigation_fragment);

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

Демонстрационное приложение работает с видимым видом карты.
Рисунок 1. Демонстрационное приложение Navigation SDK для iOS, демонстрирующее демонстрацию Data Back
Демонстрационное приложение запущено, но карта не отображается.
Рисунок 2. Демонстрационное приложение запущено, но карта не отображается. Обратите внимание, что оставшееся время и расстояние, а также привязанное местоположение продолжают обновляться.

Используйте темный стиль карты

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

Navigation SDK отображает свои карты с помощью Google Maps SDK для Android , который содержит параметры для стилизации любых видов карт, не относящихся к навигации, в вашем приложении. Вид навигации также поддерживает принудительное включение темного режима. Это может не влиять на все устройства одинаково из-за различий в типе экрана, но в некоторых случаях позволяет потенциально экономить энергию. Недавнее исследование показало, что количество энергии, экономимой темным режимом на некоторых экранах, зависит от того, насколько ярким был экран изначально. Например, темный режим экономит больше энергии на экранах, настроенных на полную яркость, чем на экранах, яркость которых уже настроена на 30–50 % от максимальной. Это важно учитывать при использовании темного режима для ваших приложений, поскольку экономия энергии будет зависеть от того, как конечный пользователь устанавливает яркость экрана.

Дополнительную информацию об изменении навигационного интерфейса см. в разделе Изменение навигационного интерфейса .

Скриншот Navigation SDK, работающего на iPhone 15 Pro с темным стилем карты.
Рисунок 3. Навигационный SDK, настроенный с использованием темного стиля карты

Чтобы создать тёмный стиль для вашей карты, используйте объект MapStyleOptions со стилем JSON , представляющим выбранный вами тёмный стиль карты. Устаревшие стили JSON можно создать с помощью редактора стилей по адресу https://mapstyle.withgoogle.com/ .

Изменить частоту обновления местоположения GPS

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

Это невозможно контролировать напрямую в Navigation SDK, но если ваше приложение Android запрашивает данные о местоположении самостоятельно, вам следует ознакомиться с рекомендациями статьи «Оптимизация местоположения для экономии заряда батареи» в документации для разработчиков Android. Аналогичные рекомендации применимы и к источникам данных о местоположении, отличным от GPS (мобильные сети и Wi-Fi).

Обучайте своих пользователей

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

  • Заблокировать телефон
  • Переведите навигационное приложение в фоновый режим
  • По возможности используйте навигацию без карты.
  • Уменьшите яркость экрана, используя темный режим для экранов OLED и AMOLED или включив адаптивную регулировку яркости.
  • Держите устройство в прохладном месте
  • Подключитесь к автомобильному Wi-Fi, если он доступен.
Ознакомьтесь с рекомендациями для конечных пользователей по продлению времени автономной работы Android-устройства в статье «Как максимально эффективно использовать аккумулятор». Помните, что эти рекомендации включают действия, которые могут снизить эффективность навигационного приложения, как описано в разделе «Оптимизация энергопотребления приложения» данного руководства.

Измерение энергопотребления

Для измерения энергопотребления можно использовать профессиональные инструменты, но их приобретение зачастую сопряжено с трудностями или большими затратами. Приложения и инструменты профилирования IDE, такие как Power Profiler в Android Studio и панель Battery Usage в XCode Organizer, измеряют энергопотребление, но устранить влияние фоновых процессов или установить базовый уровень производительности для сравнения может быть сложно. В некоторых случаях ограничения устройства могут препятствовать доступу к необходимым данным.

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