一. Android4 电池耗电统计原理概括
Android4系统为不同厂商的硬件平台提供了相同的电池耗电统计方法和接口,各个平台根据自身特性填写配置参数文件【power_profile.xml】,android系统运行时根据读取到的配置文件中的值,计算各个项目的耗电量。其中:
功耗参数配置文件:power_profile.xml;
读取配置和计算各项静态平均功耗的类:PowerProfile.java
具体提供用电统计策略的系统接口类:BatteryStatsImpl.java
【向BatteryStatsImpl 系统接口喂数据的系统服务:ActivityManagerService等。用于统计生成各个app和杂项子系统的用电情况】
显示电池消耗统计的实例:Setting ---> fuelgauge ---> PowerUsageSummary
二. Android4原生油量表统计列表描述【PowerUsageSummary】
该界面列表显示了最后一次电池充满后,无充电的总时间内,各应用程序和各杂项子系统消耗电量的情况,列表按耗电比例降序排列。
如图:
共包括如下部分:
1. 各应用程序【uid != 0 ,含uid == 1000的标签为“Android系统”的系统级服务】的耗电统计:
各应用的耗电值具体包含如下项,
(最后一次充满电后,未充电的时长内,该应用的占用CPU总时间 * 平均cpu功耗) + (最后一次充满电后,未充电的时长内,该应用占用wakelock的总时间*平均wakelock功耗)+ (最后一次充满电后,未充电的时长内,该应用总的数据传输量 * 数据传输平均功耗) + (最后一次充满电后,未充电的时长内,该应用维持WIFI On的总时间 * Wifi On的平均功耗) + (最后一次充满电后,未充电的时长内,该应用维持WIFI scan的总时间 * Wifi Scan的平均功耗) + (最后一次充满电后,未充电的时长内,该应用使用sensor的时间 * sensor平均功耗【包括GPS和其他sensor】)
【SYSTEM_UID = 1000;PHONE_UID = 1001;SHELL_UID = 2000;
WIFI_UID = 1010;BLUETOOTH_UID = 1002;
MEDIA_RW_GID = 1023; MEDIA_UID = 1013;
用户apk应用的uid值 > 10000】
比如:PVS游戏的用电细节描述【主要为占用CPU耗电】
微信应用后台服务的耗电细节【主要是占用wakelock唤醒锁时间而造成耗电】:
2. Android OS内核进程【uid==0】的耗电统计:
((最后一次充满电后,未充电的时长内,机器总的运行时间) – ( 最后一次充满电后,未充电的时长内,应用占用的wakelock总时间) – (最后一次充满电后,未充电的时长内,ScreenOn总时间)) * (POWER_CPU_AWAKE)
【其中POWER_CPU_AWAKE为关闭屏幕但未待机时的平均功耗】
3. 杂项子系统的耗电统计【包括:通话,蓝牙,Wi-Fi On,Screen使用,RadioOn,关屏后待机的idle耗电等与硬件平台相关且相对独立的耗电项】:
通话耗电:((最后一次充满电后,未充电的时长内总的通话时间) * 平均通话功耗)
【其中平均通话功耗对应配置文件中的POWER_RADIO_ACTIVE】
Screen使用耗电:(ScreenOn时间 * 单纯ScreenOn平均功耗) +(各亮度等级下的背光功耗 * 各个亮度等级显示时间)
Radio使用耗电:(各信号强度等级下的POWER_RADIO_ON * 各信号强度等级持续的时间 ) + (无线扫描时间 * 平均的无线扫描功耗值POWER_RADIO_SCANNING)
Wi-Fi使用耗电:((最后一次充满电后,未充电的时长内,总的Wi-Fi Running时间)– 应用占用的Wi-Fi Running时间) *(平均POWER_WIFI_ON)
蓝牙使用耗电:(最后一次充满电后,未充电的时长内总的BT On时间) *(平均POWER_BLUETOOTH_ON) + (btPing次数 * 平均POWER_BLUETOOTH_AT_CMD)
待机耗电:((最后一次充满电后,未充电的时长内,总运行时间 )– ScreenOn时间) * (平均POWER_CPU_IDLE功耗)
三. Android省电策略:
根据如上的分析,Android系统平台可控的省电关键点:
1.控制待机功耗【待机模式下关掉不必要的外设,一般平台的待机功耗可以控制在3-5ma】
2.框架层中控制Android的partial型wakelock锁的使用【partial型wakelock锁会强制系统无法进待机,表面屏幕关闭的情况下,系统还在运行耗电】
3.系统层控制RTC Alarm 唤醒系统的频率。
4.提醒用户进入省电模式【比如关闭网络设备,调低屏幕亮度等】