Информация о расходе заряда батареи основана на статистике использования батареи и значениях профиля энергопотребления.
Статистика использования батареи
Фреймворк автоматически определяет статистику использования батареи, отслеживая, как долго компоненты устройства находятся в разных состояниях. Когда компоненты (чипсет Wi-Fi, приемопередатчик, Bluetooth, GPS, дисплей, ЦП) меняют состояние (включены/выключены, бездействуют/работают на полную мощность, низкая/высокая яркость и т. д.), управляющий сервис сообщает об этом сервису BatteryStats фреймворка. BatteryStats собирает информацию и хранит ее даже после перезагрузки. Сервис не отслеживает потребление тока напрямую, а собирает информацию о времени работы, которая позволяет приблизительно оценить расход заряда батареи разными компонентами.
Статистика собирается с помощью следующих методов:
- Push. Сервисы, которые отслеживают изменения компонентов, передают информацию об изменении состояния сервису BatteryStats.
- Pull. Для таких компонентов, как использование ЦП приложениями, фреймворк автоматически извлекает данные в точках перехода (например, при запуске или остановке Activity), чтобы сделать снимок.
Потребление ресурсов связано с приложением, использующим ресурс. Если несколько приложений одновременно используют ресурс (например, блокировку пробуждения, которая не позволяет системе перейти в спящий режим), платформа распределяет потребление между этими приложениями, хотя и не обязательно равномерно.
Чтобы не потерять статистику использования для события завершения работы, которое может указывать на проблемы с потреблением заряда батареи (например, завершение работы происходит, потому что батарея разрядилась до нуля), платформа отправляет статистику примерно каждые 30 минут.
Статистика использования батареи обрабатывается фреймворком и не требует изменений со стороны OEM.
Значения профиля энергопотребления
Внимание! Производители устройств должны предоставлять профиль энергопотребления компонентов, в котором указано значение потребляемого тока для компонента и приблизительный расход батареи, вызванный компонентом с течением времени. Этот профиль определен в файле platform/frameworks/base/core/res/res/xml/power_profile.xml. Информацию об этих настройках можно найти в разделе Значения мощности.
В профиле энергопотребления оно указывается в миллиамперах (мА) при номинальном напряжении и может быть дробным, выраженным в микроамперах (мкА). Значение должно быть указано в миллиамперах и относиться к батарее, а не к шине питания, которая не соответствует току, потребляемому от батареи.
Например, профиль энергопотребления экрана указывает, сколько миллиампер тока требуется, чтобы экран был включен при минимальной и максимальной яркости. Чтобы определить энергозатраты (то есть заряд аккумулятора, расходуемый компонентом дисплея) на поддержание экрана во включенном состоянии, фреймворк отслеживает время, проведенное на каждом уровне яркости, а затем умножает эти временные интервалы на интерполированную стоимость яркости дисплея.
Кроме того, фреймворк умножает процессорное время для каждого приложения на значение мА, необходимое для работы ЦП на определенной скорости. Этот расчет позволяет определить, сколько энергии расходует приложение при выполнении кода ЦП (время работы в качестве активного приложения и общее время, включая фоновую активность, указываются отдельно).