测量电量值

设备制造商必须在 /frameworks/base/core/res/res/xml/power_profile.xml 中提供组件的电源配置文件。

要确定电源配置文件的有关数值,请使用测量设备耗电量的硬件,并执行需要信息的各种操作。测量执行这些操作时的电量使用情况并计算各项值(在适当情况下与其他基准操作的电量消耗做对比所得的差异值)。

电源配置文件的目的在于适当地估算电量消耗情况,电源配置文件的有关数值以电流(安培)表示。Android 框架用电流乘以子系统处于激活状态的时间,并计算毫安时值,然后将此值用于评估应用/子系统消耗的电池电量。

运行 Android 7.0 及更高版本且配备蓝牙、调制解调器和 WLAN 控制器的设备可以提供从芯片组数据获得的其他电量值。

采用异构 CPU 的设备

设备电源配置文件(针对具备异构架构 CPU 核心的设备)必须包含以下额外字段:

  • 每个集群的 CPU 总数(以 cpu.clusters.cores 表示)。
  • 每个集群支持的 CPU 速率。
  • 每个集群中处于激活状态的 CPU 耗电情况。

为了区分集群中激活的 CPU 耗电量和所支持的 CPU 速率耗电量,需要将集群编号附加到数组名称上。集群编号按照 CPU 核心在内核设备树中的顺序分配。例如,在具备两 (2) 个集群,拥有四 (4) 个核心的异构架构中:

  • cluster0 由 cpu0-3 组成
  • cluster1 由 cpu4-7 组成

当 Android 框架从位于 /sys/devices/system/cpu/cpu<number>/cpufreq/stats 中的 sysfs 文件中读取统计信息时,将使用以上 CPU 核心编号。

集群中激活的 CPU 以及速率示例:

<array name="cpu.active.cluster0">
<value>200</value>
<value>300</value>
<value>400</value>
</array>
<array name="cpu.speeds.cluster0">
<value>600000</value>
<value>800000</value>
<value>1200000</value>
</array>

<array name="cpu.active.cluster1">
<value>400</value>
<value>500</value>
<value>600</value>
</array>
<array name="cpu.speeds.cluster1">
<value>800000</value>
<value>1200000</value>
<value>1400000</value>
</array>

电量值

下表列出可供使用的电量值设置。要查看 AOSP 中的示例文件,请参阅 power_profile.xml

名称 说明 示例值 备注
none 0
screen.on 屏幕以最低亮度打开时消耗的额外电量。 200 毫安 包括触摸控制器和显示屏背光。Android 的最低亮度并非是 0,而是倾向于设为 10% 或 20%。
screen.full 与处于最低亮度的屏幕相比,当屏幕处于最高亮度时消耗的额外电量。 100-300 毫安 将此值的分数(基于屏幕亮度)添加到 screen.on 值,用来计算屏幕耗电量。
wifi.on 当 WLAN 打开,但未接收、发送信号或执行扫描时消耗的额外电量。 2 毫安
wifi.active 通过 WLAN 发送或接收信号时消耗的额外电量。 31 毫安
wifi.scan WLAN 正在扫描无线接入点时消耗的额外电量。 100 毫安
dsp.audio 当通过 DSP 进行音频解码/编码时消耗的额外电量。 14.1 毫安 预留以供日后使用。
dsp.video 当通过 DSP 进行视频解码时消耗的额外电量。 54 毫安 预留以供日后使用。
camera.avg 用于典型相机应用的相机子系统的平均电量消耗。 600 毫安 预期将此值作为当应用运行预览且每分钟捕获大约 10 张全分辨率照片时的粗略估算值。
camera.flashlight 当摄像头闪光模块开启时消耗的平均电量。 200 毫安
gps.on GPS 获取信号时消耗的额外电量。 50 毫安
radio.active 蜂窝无线电发送/接收信号时消耗的额外电量。 100-300 毫安
radio.scanning 当移动网络无线装置寻呼发射塔时消耗的额外电量。 1.2 毫安
radio.on 当蜂窝无线电开启时消耗的额外电量。多值条目,每个信号强度(无信号、弱、良好、强)各有一个值。 1.2 mA 某些无线装置在搜索手机信号塔但未能检测到信号时会增加耗电量。随着信号强度的增加,这些值可能保持不变或变小。如果您只提供一个值,则所有强度都使用同一个值。如果您提供两个值,则第一个值在无信号时使用,第二个值用于所有其他信号强度,以此类推。
bluetooth.controller.idle 蓝牙控制器在空闲时的平均电流消耗量(毫安)。 - 这些值并不是通过预估获得的,而是从控制器的数据表中提取出来的。如果有多种接收或发送状态,则采用这些状态的平均值。此外,系统将即时收集数据以用于低功耗 (LE) 和蓝牙扫描

Android N 及更高版本不再将蓝牙电量值用于 bluetooth.active(通过蓝牙 A2DP 播放音频时使用)和 bluetooth.on(在蓝牙打开但处于空闲状态时使用)。
bluetooth.controller.rx 蓝牙控制器在接收信号时的平均电流消耗量(毫安)。 -
bluetooth.controller.tx 蓝牙控制器在发送信号时的平均电流消耗量(毫安)。 -
bluetooth.controller.voltage 蓝牙控制器的平均工作电压(毫伏)。 -
modem.controller.idle 调制解调控制器在空闲时的平均电流消耗量(毫安)。 - 这些值并不是通过预估获得的,而是从控制器的数据表中提取出来的。如果有多种接收或发送状态,则采用这些状态的平均值。
modem.controller.rx 调制解调控制器在接收信号时的平均电流消耗量(毫安)。 -
modem.controller.tx 调制解调控制器在发送信号时的平均电流消耗量(毫安)。 -
modem.controller.voltage 调制解调控制器的平均工作电压(毫伏)。 -
wifi.controller.idle WLAN 控制器在空闲时的平均电流消耗量(毫安)。 - 这些值并不是通过预估获得的,而是从控制器的数据表中提取出来的。如果有多种接收或发送状态,则采用这些状态的平均值。
wifi.controller.rx WLAN 控制器在接收信号时的平均电流消耗量(毫安)。 -
wifi.controller.tx WLAN 控制器在发送信号时的平均电流消耗量(毫安)。 -
wifi.controller.voltage WLAN 控制器的平均工作电压(毫伏)。 -
cpu.speeds 多值条目,以千赫 (KHz) 为单位列出每个 CPU 可能支持的速率。 125000 千赫、250000 千赫、500000 千赫、1000000 千赫、1500000 千赫 条目的数量和顺序必须与 cpu.active 中的毫安条目相一致。
cpu.idle 当 CPU(和 SoC)处于系统挂起状态时,系统消耗的总电量。 3 毫安
cpu.awake 当 CPU 处于调度空闲状态(内核空闲循环)时消耗的额外电量;系统没有处于系统挂起状态。 50 毫安 您的平台可能在不同的耗电水平上存在多种空闲状态;针对时间较长的调度空闲(几毫秒)可以选择一种有代表性的空闲状态。检查您的测量设备上的电量图,并选择 CPU 耗电量最低时的样本,丢弃当 CPU 退出空闲状态时的较高耗电量样本。
cpu.active CPU 以不同速度运行时消耗的额外电量。 100 毫安、120 毫安、140 毫安、160 毫安、200 毫安 此值代表 CPU 供电通道以不同速率运行时消耗的电量。在内核中设定每个耗电量所允许的最大速率并限制 CPU 以该速率运行。条目的数量和顺序应与 cpu.speeds 中的条目的数量和顺序相一致。
cpu.clusters.cores 每个 CPU 集群所包含的核心数。 4、2 仅适用于具有异构 CPU 架构的设备。条目的数量和顺序应与适用于 cpu.active 和 cpu.speeds 的集群的条目的数量相一致。第一个条目表示 cluster0 中的 CPU 核心数,第二个条目表示 cluster1 中的 CPU 核心数,依此类推。
电池容量 总电池容量 (以毫安时为单位)。 3000 毫安时

低功耗 (LE) 和蓝牙扫描

对于运行 Android 7.0 的设备,系统为低功耗 (LE) 扫描和蓝牙网络流量(例如:RFCOMM 和 L2CAP)收集数据并将这些活动与初始化应用相关联。蓝牙扫描与初始化扫描的应用有关,但批量扫描与后者无关(而是与蓝牙应用有关)。对于扫描 N 毫秒的应用,扫描耗时为 N 毫秒接收时间和 N 毫秒发射时间;所有剩余的控制器时间被分配至网络流量或蓝牙应用。