Как Android рассчитывает расход батареи по приложениям?

24

Как Android измеряет энергию, используемую отдельным аппаратным компонентом? Как Android измеряет энергию, используемую каждым отдельным процессом?

diimdeep
источник
Я думаю, сколько инструкций выполняется за 1 сек.
AZ_
6
@Algo: Будет совершенно неверно предполагать, что фоновое приложение, которое использует много ЦП, требует больше энергии аккумулятора, чем другое приложение, которое использует мало ЦП, но много Wi-Fi, GPS и дисплея.
Ли Райан
Если это так, то вы можете получить подсказку из числа разрешений, полученных приложением ... просто идея.
AZ_2
@LieRyan в статистике батареи, разве wifi, gps, bluetooth и т. Д. Не рассчитаны как их собственный «потребитель» батареи?
Райан Конрад

Ответы:

11

Android отслеживает события, которые влияют на использование батареи, и сохраняет эту информацию в файле batterystats.bin. Некоторые примеры:

  • экран времени был включен с определенной настройкой яркости
  • какое приложение (или не приложение Android) и как долго удерживается активная блокировка (не позволяет устройству спать)
  • Загрузка ЦП на процесс (приложение Android или другой процесс)
  • уровень сигнала телефона
  • Использование GPS
  • и т.п.

Android вычисляет, сколько энергии использует каждое приложение или компонент (например, экран), на основании информации о конфигурации, включенной в устройство производителем.

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

Статистика батареи может быть сброшена с устройства с помощью:

adb shell dumpsys batterystats

Вот интересный фрагмент поста Дайаны Хэкборн с более подробной информацией о энергопотреблении вэйк-локов :

Существует два способа вычисления мощности от следов блокировки.

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

  2. Даже если сама блокировка пробуждения не приводит к энергопотреблению, удерживание блокировки пробуждения в одном приложении может позволить другим приложениям работать и ЦП, если они не будут иначе. (Например, в некоторых приложениях может быть цикл {sleep (1); делать что-то;}, который не будет работать, если не удерживать пробужденные блокировки.) Для решения этой проблемы половина приложений, используемых ЦП, распределяется по обвинению. те, которые держат замки после.

Павел Надольский
источник
Можете ли вы предоставить источники / ссылки, подтверждающие ваш ответ?
diimdeep
Вся информация взята из предоставленной ссылки на ветку google + от разработчика Google, знакомого с этой областью.
Павел Надольский
1
Правильная команда для новых устройств (не знаю, от какого API) должна быть: adb shell dumpsys batterystats или (если вы хотите, чтобы она была внутри файла): adb shell dumpsys batterystats> batterystats.txt
android developer