Android* 功耗测量技巧

作者:Tuan H. Bui

 

 

概述

对于智能手机和平板电脑设备而言,电池使用时间是提供出色用户体验的一个重要因素。这些设备希望能够在单次充电后,在正常操作模式下运行超过 10 个小时,在待机模式下持续数天或数周时间。

了解运行应用时设备的功耗将有助于应用开发人员选择适当的软件设计,从而最大限度地降低设备功耗。

本文介绍了在应用运行时获取功耗数据的技巧。

 

 

 

 

讨论

Android 操作系统在 /sys/class/power_supply/battery/uevent datafile1 中提供了大量功耗相关性能数据。Android 中的电池设备驱动程序对 uevent datafile 进行更新。更新频率最短可以是每 10 毫秒 1 次,最长也可以是每 30-40 秒 1 次。这些数据文件中包含的信息量因设备而异。这里的数据源自运行 Android Honeycomb 的 Motorola Xoom。

 

 

 

 

事件名称 Motorola Xoom
POWER_SUPPLY_PRESENT
POWER_SUPPLY_NAME
POWER_SUPPLY_STATUS
POWER_SUPPLY_TECHNOLOGY
POWER_SUPPLY_VOLTAGE_NOW
POWER_SUPPLY_VOLTAGE_AVG
POWER_SUPPLY_CURRENT_NOW
POWER_SUPPLY_CURRENT_AVG
POWER_SUPPLY_CHARGE_FULL
POWER_SUPPLY_CHARGE_NOW
POWER_SUPPLY_CHARGE_COUNTER
POWER_SUPPLY_CAPACITY


不同事件名称的含义描述如下:

 

 

 

 

Power Supply Present(当前电源): 指出存在一个电源。这一事件的值应当始终为 1。
Power Supply Name(电源名称): 电源的名称。以下显示了一些可能指定给能够向设备供电的各种装置的名称,如“电池”、“ac_charger”和“usb”等等。电池是本文的首要关注点。
Power Supply Status(电源状态): 指出设备是否在充电。
Power Supply Technology(电源技术): 电池技术。常见值为 Lithium-Ion (Li-Ion)
Power Supply Voltage Now(当前电源电压): 电池电压,单位为微伏 (uV)。对于其它设备,该值的单位可能为毫伏 (mV)
Power Supply Voltage Avg(电源平均电压): 平均电池电压。
Power_Supply Current Now(当前电源电流): 电池电流,单位为微安 (uA)。
Power Supply Current Avg(平均电源电流): 平均电池电流。
Power Supply Charge Now(当前电源电量): 电池的剩余电量,单位为微安/小时 (uAh)。通常,电池容量的单位为毫安时或瓦时 (Wh)。
Power Supply Capacity(电源容量): 电池的剩余容量百分比。
Power Supply Charge Full(电源充电容量): 电池所能容纳的容量。这通常指电池完全充满电时的电量。

 


我们将利用电池设备驱动程序报告的数据类型来描述不同的功耗计算方法。

当同时提供了电压和电流读数时,计算功耗十分简单,只需将电压与电流相乘即可获得功耗值(单位为瓦特)。

 

 

 

 

平均功耗 =(平均电压 * 平均电流)/ 1e9
已消耗电池电量 =(平均电流 * 工作负载持续时间)/ 1e3
电池寿命 = 电池满电量/已消耗电池电量


其中:
工作负载持续时间 按小时测量
平均功耗 以 mW 表示
已消耗电池电量 以 mAh 表示
如果 电池满电量 未提供,则可用设备制造商提供的电池额定容量替代。设备制造商通常将电池额定容量作为设备规格的一部分进行提供。


示例: 在平均电压为 7,200,000 微伏时,设备播放 30 分钟的视频剪辑所消耗的平均电流为 450,000 微安。假设电池规格为 3,200 毫安时,我们即可使用上述公式计算出平均功耗为 3,240 微伏、消耗的电量为 225 毫安时。据此,电池使用时间应约为 14 小时。以上计算出的是理想情况下的电池使用时间,前提是 Android 操作系统可持续播放视频,直到消耗完最后一毫安时的电量。现实中,当剩余的电池容量达到最小值(通常为剩余 2% 到 5%)时,操作系统即会关闭设备。

有些设备仅报告 Power_Supply_CapacityAverage_Voltage。在这种情况下,我们需要从设备制造商处获取电池额定容量信息,才能计算出功耗。假设以上数据可提供,则可通过以下方式计算出平均功耗、已消耗能量和预计电池使用时间:

 

 

 

 

电池已用百分比 = 电池起始容量 – 电池剩余容量
已用电池电量 = 已用电池百分比 * 电池额定容量
平均电流 = 已用电池电量 / 工作负载持续时间
平均功耗 = 平均电压 * 平均电流


示例: 在平均电压为 7.2 瓦特时,30 分钟的视频聊天会话消耗 15% 的电池容量。假设电池电量为 3,200 毫安时,我们可计算出平均电流为 960 毫安,平均功耗约为 6,912 毫瓦。

这种技巧的准确性取决于以下前提:设备在正常的工作负载(所消耗的电池容量百分比合乎常理)下运行了很长时间。

设备的功耗会受到多种变量的影响。若要获得前后一致的功耗测量值,需要严格控制这些变量。重要变量包括:

 

 

 

 

  • 显示屏亮度。显示屏的功耗随亮度设置的不同而有所差异。亮度最小时,功耗为 1 瓦特。亮度最大时,功耗则为 3 瓦特。在不同的实验中确保亮度设置一致对于确保得出有意义的功耗测量至关重要。环境光传感器 (ALS) 也会根据环境亮度等级对显示屏亮度进行调节,因此在测量功耗时应当禁用。
  • 在后台运行的应用和服务。为了确保测量环境的前后一致,应使用任务管理器尽可能关闭那些在后台运行的不重要的应用和服务。
  • WiFi、GPS 和蓝牙会消耗大量电量。如果待测应用不会用到,GPS 和蓝牙在功耗测量时应当关闭。WiFi 对于 Android 功能十分重要,应当使其始终处于打开状态。
  • USB 设备在功耗测量时应当断开其连接,除非待测应用需要 USB 设备。
  • 扬声器的功耗在很大程度上取决于所播放音乐的类型和音量。为了最大限度地减少变化,音量应设置为固定级别并使用耳机。
  • 移动设备会激活不同的传感器,同时还会激活相关的设备驱动程序以处理这些传感器的输出。因此在功耗测量过程中,不应过多移动或触摸设备。

 

 

总结

了解应用的功耗是改善其能效的第一步。确保操作环境的前后一致对于获取应用的有用功耗数据至关重要。