Энергетические системы и устойчивость
Оптимизация срока службы батареи для непрерывного использования в приложениях Ios
Table of Contents
Срок службы батареи остается одним из наиболее важных факторов в удобстве использования мобильных устройств, особенно для пользователей, которые полагаются на свои приложения iOS в течение дня. По мере того, как приложения становятся более функциональными, увеличивается спрос на непрерывную обработку, сетевую активность и графику с высоким разрешением, что приводит к более быстрому разряду батареи. Это не только расстраивает пользователей, но и может привести к снижению скорости удержания и негативным отзывам. К счастью, сочетание хорошо зарекомендовавших себя лучших практик и современных API iOS позволяет разработчикам значительно снизить потребление энергии без ущерба для производительности приложений. В этой статье рассматриваются основные источники разрядки батареи в приложениях iOS и предлагаются действенные стратегии для оптимизации времени автономной работы во время длительного использования.
Понимание потребления батареи в приложениях iOS
Чтобы оптимизировать время автономной работы, разработчики должны сначала понять, как приложения iOS потребляют энергию. Почти каждая операция на устройстве потребляет энергию от батареи, но некоторые виды деятельности намного более требовательны, чем другие. Основные категории потребления батареи включают:
- Дисплей и подсветка: Экран часто является крупнейшим потребителем энергии. Высокая яркость, длительное время работы экрана и частые перерисовки из анимации или неэффективные обновления пользовательского интерфейса увеличивают дренаж.
- Сетевая активность: Сотовые модемы и Wi-Fi-радиостанции используют значительную мощность при передаче или приеме данных.Частые, небольшие сетевые вызовы особенно неэффективны, потому что радио должно включать, подключаться и снова отключаться для каждой сессии.
- Задачи фона: Приложения, которые продолжают запускать процессы в фоновом режиме — такие как обновления местоположения, фоновый вывод или VoIP-соединения — могут препятствовать вхождению устройства в состояние с низким энергопотреблением.
- CPU и GPU Load: Сложные вычисления, рендеринг тяжелой графики и чрезмерные циклы поддерживают процессор активным, потребляя мощность, пропорциональную нагрузке.
- Использование датчиков: Постоянный доступ к датчикам, таким как GPS, акселерометр или микрофон, может быстро разрядить батарею, особенно если приложение не управляет частотой выборки или использует правильные уровни точности.
Определение того, какой из этих компонентов является основным виновником в вашем приложении, требует профилирования с помощью таких инструментов, как вкладка Энергетической диагностики Xcode в Инструментах. Журнал энергии показывает подробные разбивки использования процессора, сетевой активности и использования местоположения с течением времени, что позволяет целенаправленно оптимизировать.
Ключевые стратегии для разработчиков
Эффективная оптимизация батареи включает многоуровневый подход: использование энергоэффективных API, сокращение ненужной работы и соблюдение состояний мощности системы. Ниже приведены наиболее эффективные методы для приложений, которые требуют постоянного использования.
Минимизация фоновой активности
Резервное исполнение - это большой разряд батареи. iOS предоставляет несколько механизмов для фоновой работы, но каждый из них должен использоваться разумно. Background fetch позволяет приложениям периодически загружать небольшие объемы данных, но частота управляется системой. Установите до самого большого приемлемого интервала (например, , если не требуется фоновое обновление). Для задач, которые действительно требуют фонового завершения, используйте Background Tasks (BGTaskScheduler) вместо того, чтобы поддерживать работу приложения. Этот API отсрочивает работу до времени, когда система имеет достаточный энергетический бюджет, уменьшая помехи для деятельности на переднем плане, обращенной к пользователю.
Если ваше приложение использует службы определения местоположения, выберите соответствующий уровень точности. Вместо постоянных обновлений GPS с высокой точностью используйте региональный мониторинг или сервис определения местоположения с существенным изменением для грубого отслеживания местоположения. Например, фитнес-приложение, которое должно знать только, когда пользователь входит или выходит из парка, может использовать мониторинг региона, что гораздо эффективнее, чем непрерывный опрос GPS. Также рассмотрите возможность установки свойство на — это говорит iOS оптимизировать мощность для пешеходов или скорости езды на велосипеде.
Оптимизируйте использование сети
Сетевые операции - это огромный разряд аккумуляторов, особенно по сотовой связи.
- Бэтч-сетевые запросы: Вместо того, чтобы совершать множество небольших API-звонков, агрегируйте данные в меньшее количество, более крупных запросов.Радио проводит меньше времени в режиме передачи высокой мощности, когда оно может отправлять всплеск данных, а затем простаивать.
- Использовать прогрессивные загрузки: Для больших активов, таких как изображения или видеофайлы, загружать только данные, необходимые немедленно.Использовать диапазоны (HTTP Range Requests) или API с учетом размера.
- Включить HTTP/2 или QUIC: Эти протоколы уменьшают накладные расходы на соединение и позволяют мультиплексировать потоки, снижая потребление энергии на запрос.
- Принять NSURLSession должным образом: Используйте фоновые сессии для переносов, которые должны продолжаться, даже если приложение приостановлено. Для сеансов переднего плана установите соответствующим образом и используйте , чтобы избежать повторных попыток во время плохой связи.
- Компрессорные полезные нагрузки: Используйте gzip или сжатие Brotli на стороне сервера.Меньшие данные сокращают время передачи и мощность радиосвязи.
Рассмотрите возможность использования push-уведомлений вместо опроса. Push более энергоэффективный, потому что система поддерживает одно постоянное соединение для всех приложений, и приложение просыпается только тогда, когда приходят новые данные. Для некритических обновлений используйте background push с удаленными уведомлениями (тихие толчки) экономно, поскольку они по-прежнему потребляют энергию для обработки.
Эффективное исполнение кода
Неэффективные алгоритмы и чрезмерное использование процессора - это скрытые разряды аккумуляторов. Профилируйте свой код с помощью профиля времени Xcode , чтобы определить точки доступа.
- Ненужные циклы опросов: Используйте таймеры только тогда, когда это неизбежно; предпочитайте обратные вызовы делегатов или обратные вызовы, которые система запускает при изменении условий.
- Тяжелые вычисления на главном потоке: Загрузить работу в фоновые очереди (с использованием или ), чтобы сохранить основной цикл запуска свободным для обновлений пользовательского интерфейса.
- Легкая загрузка: Загрузка ресурсов (изображений, моделей данных, контроллеров просмотра) только при необходимости, а не при предварительной загрузке всего при запуске приложения.
- Уменьшить накладные расходы на создание объектов: По возможности повторно использовать объекты, особенно в плотных петлях (например, при обработке данных с датчиков).
Для высокочастотных операций, таких как вывод Core ML или выполнение шейдера Metal, устройства iOS имеют специальное оборудование (Neural Engine, GPU), которое намного более энергоэффективно, чем процессор. Убедитесь, что вы используете наиболее подходящий API для своей рабочей нагрузки — например, используя Проверка устройства или ARKit с аппаратным ускорением лучше, чем пользовательские решения на основе процессора.
Мощные API
iOS предлагает несколько API, разработанных специально для низкого энергопотребления. Используя их можно автоматически экономить аккумулятор без индивидуальной оптимизации:
- Вращающаяся с фоновой конфигурацией: Как уже упоминалось, она обрабатывает передачи в отдельном процессе, который является менее энергоемким, чем активность переднего плана.
- AVCaptureSession — вывод .photo: При использовании камеры выберите предустановленный для неподвижных изображений вместо видео — видео требует непрерывного считывания и обработки датчиком, который быстро стекает.
- Базовое местоположение — отложенные обновления: При работе в фоновом режиме обновления местоположения могут быть отложены с помощью .
- Энергетические панели: Используйте для адаптации поведения приложения, когда пользователь включил режим низкой мощности. Уменьшите анимацию, более низкую частоту кадров, отключите несущественную синхронизацию или переключитесь на ресурсы более низкого качества.
Использование Hardware Optimizations
Современные iPhone включают аппаратные средства управления питанием, такие как сопроцессоры движения серии M и выделенные кодеры/декодеры. Загружайте обработку данных в эти блоки, когда это возможно. Например, используйте с аппаратно ускоренным кодированием H.264/H.265 вместо кодирования программного обеспечения. Аналогично, модели Core ML могут работать на нейронном двигателе через тип устройства для вывода, который использует часть мощности GPU или CPU.
Также рассмотрим Металлические шейдеры производительности для обработки изображений — они работают на GPU, который более энергоэффективный, чем CPU для параллельных рабочих нагрузок. Всегда тестируйте на физических устройствах, так как симулятор не моделирует поведение мощности точно.
Пользовательские советы и настройки
В то время как разработчики контролируют большую часть энергопотребления, у пользователей также есть возможности продлить время автономной работы во время интенсивного использования приложений.
- Низкая яркость экрана: Поощряйте пользователей вручную уменьшать яркость или включать автосветимость (Настройки > Дисплей и яркость).
- Режим работы с низким энергопотреблением: Предложите включить режим работы с низким энергопотреблением, когда они ожидают непрерывного использования (Настройки > Батарея). Система автоматически снизит фоновую активность и производительность.
- Снижает частоту обновления: Для устройств с дисплеем ProMotion (120 Гц) пользователи могут ограничить частоту кадров до 60 Гц в Настройках > Доступность > Движение > Ограниченная частота кадров. Приложения также могут учитывать это, отключая анимацию 120 Гц, когда это не требуется.
- Закрыть ненужные приложения: Хотя iOS эффективно обрабатывает многозадачность, фоновые приложения по-прежнему потребляют некоторые ресурсы.
- Отключите ненужные сервисы: Bluetooth, Wi-Fi и службы определения местоположения могут быть отключены, когда в этом нет необходимости. Для определения местоположения пользователи могут устанавливать разрешения приложений на «Пока использовать» вместо «Всегда».
Вы также можете добавить Обнаружение режима низкой мощности в ваше приложение, чтобы автоматически уменьшить использование ресурсов (например, снижение качества видео, синхронизация пауз, снижение частоты опросов).
Заключение
Оптимизация времени автономной работы в приложениях iOS - это не одноразовая задача, а постоянный процесс, который требует понимания взаимодействия между аппаратным обеспечением, системными службами и кодом приложения. Путем раннего профилирования, использования энергоэффективных API, минимизации фоновой работы и уважения выбора управления питанием пользователей разработчики могут создавать приложения, которые обеспечивают отличный опыт непрерывного использования без разрядки батареи. Эти методы повышают удовлетворенность пользователей, уменьшают отток и помогают устройствам дольше работать между зарядами. Для получения дополнительной информации обратитесь к официальной документации Apple по Энергетическая диагностика Жизненный цикл приложения , а также API состояния батареи . Для более широких передовой практики, руководство по энергоэффективности для приложений iOS остается важным ресурсом.