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


24

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


Я думаю, сколько инструкций выполняется за 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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.