【前言】
手机功耗分为: 硬件功耗与软件功耗。
【硬件功耗】
硬件功耗计算函数在:processMiscUsage()
private void processMiscUsage() {
addUserUsage(); // 多用户中每个用户的耗电量
addPhoneUsage(); // 通话耗电量
addScreenUsage(); // 屏幕耗电量
addWiFiUsage(); // wifi耗电量
addBluetoothUsage(); // 蓝牙耗电量
addMemoryUsage(); // DDR内存耗电量
addIdleUsage(); // CPU suspend/idle状态下的耗电量(不包括蜂窝数据空闲功耗)
if (!mWifiOnly) {//(当只有wifi上网功能的设备时不计算蜂窝数据功耗,如平板,电视等)
addRadioUsage(); //移动数据网络的耗电量
}
}
【软件功耗】
硬件功耗比较复杂需要大量的经验,一般情况如下:
1. 过多的wtf 打印
2. 过多的crash (比如gms应用在后台不停crash导致耗电; 一些persist的进程不断的crash)
3. 过多的runtime exception
4. 过多的进程和service重启
5. 过多的kill 应用
6. 底层掉电问题:底层持锁(wakelock)时间长,底层唤醒次数多
7. system app crash问题
8. 过多的网络请求问题 (比如之前的网络助手导致的 H 和 H+ping-pong, 会导致有过多的网络请求),应用