Android如何计算应用程序的电池消耗?


24

Android如何测量单个硬件组件使用的能量?Android如何测量每个单独进程使用的能源?


我猜想在1秒内执行了多少指令。
AZ_

6
@算法:假设使用大量CPU的后台应用程序比使用少量CPU但使用大量Wifi和GPS和显示器的其他应用程序耗电更多,这完全是一种误导。
Lie Ryan

如果是这样,那么您可以从应用程序获得的许可数量中获得提示。
AZ_ 2012年

@LieRyan的电池统计信息,不是将wifi,gps,蓝牙等计算为自己的电池“消费者”吗?
瑞安·康拉德

Answers:


11

Android会跟踪影响电池使用情况的事件,并将此信息存储在batterystats.bin文件中。一些例子:

  • 时间长度屏幕以特定的亮度设置开启
  • 哪个应用程序(或非Android应用程序进程)以及唤醒锁保持了多长时间(防止设备进入休眠状态)
  • 每个进程(Android应用或其他进程)的CPU使用率
  • 电话信号强度
  • GPS使用
  • 等等

Android根据制造商在设备上包含的配置信息,计算每个应用程序或组件(例如屏幕)使用的电量。

并非所有指标都经过衡量,因此统计信息有时可能会产生误导,但在每个Android平台版本中,情况都会变得更好。

可以使用以下方法从设备中转储电池统计信息:

adb shell dumpsys batterystats

这是Diane Hackborn帖子的有趣片段,其中包含有关唤醒锁功耗的更多详细信息:

有两种方法可以计算唤醒锁的功率。

  1. 在某些芯片组上,仅需保持唤醒锁即可防止CPU进入完整的深度睡眠。在报告的电池使用情况中,这笔额外的用电量将分配给所有持有唤醒锁的应用。

  2. 即使唤醒锁本身不会导致功耗,将唤醒锁保存在一个应用程序中也可以使其他应用程序运行,并在其他情况下不会占用CPU资源。(例如,某些应用程序可能有一个{sleep(1);做某事;}循环,如果没有唤醒锁,该循环将不会运行。)为解决此问题,应将应用程序的一半CPU使用率分配给用户那些拿着唤醒锁的人。


您能否提供证明您答案的资料/参考?
diimdeep 2012年

所有信息均来自熟悉此区域的Google开发人员提供的指向google +线程的链接。
帕维尔Nadolski

1
新设备的正确命令(不确定来自哪个API)应该是:adb shell dumpsys batterystats,或者(如果需要,请在文件中输入):adb shell dumpsys batterystats> batterystats.txt
android开发人员
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.