案例分析
Case1:应用后台静默,wakelock长时间未释放
如上图,在一次版本的耗电量测试中发现耗电量显著增加,通过进一步定位发现是应用中引入的某个SDK为了在后台维持心跳使用了wakelock,而在用户将应用切入后台后一直持有没有释放,随后经过跟对应的开发同学沟通进行了优化更改了实现方式去掉了wakelock,耗电量恢复正常。
Case2:应用后台静默,各种sensor持续工作
在做另外一个版本的专项测试中发现耗电量数据异常,如下图,通过测试结果分析发现是应用在后台驻留了51分钟,各种传感器也同样工作了51分钟导致耗电量显著增加,后经过排查确定是引入的推送SDK导致的,经过修改调用方式解决。
Case3:应用前台静默,各种sensor持续工作
通过前台静默(无任何操作)15分钟,发现耗电量比上个版本高了一倍,如下图: 应用前台静默期间加速度、重力、陀螺仪这三个传感器一直被使用。
跟开发沟通后确定是由于另外一个部门提供的SDK导致的,该SDK采集传感器数据的策略有问题导致会在应用启动后一直采集造成耗电,解决方案是按照时间窗口来采集数据, 比如每次打开APP采集5分钟传感器数据, 然后关闭传感器数据采集。
通过标准
最佳实践
附:iOS耗电量测试
上面主要是讲的关于Android的耗电量测试方法及分析,当然思路是一样的,关于iOS的耗电量测试由于还没有具体的数据,这里给出一些我调研尝试过的一些方法:
1.系统接口
iOS 10系统内置的Setting里可以查看各个APP的电池消耗,系统接口能获取到整体的电池利用率,以及充电状态。
该方案不能检测固定某一时间段内的电池精准消耗。
2.硬件检测
通过硬件PowerMonitor可以精准地获得应用的电量消耗。
步骤如下:
a. 拆开iOS设备的外壳,找到电池后面的电源针脚
b. 连接电源监控器的设备针脚
c. 运行应用
d. 测量电量消耗
该方案成本太高并不适合我们的测试工作。
3.软件工具检测
由于iOS系统的封闭性,获取功耗数据只能通过Xcode自带的Instruments工具实现,步骤如下:
1. 断开iOS设备与Mac的连接(充电时测试功耗会导致数值不准确)
2. iOS设置选项->开发者选项->Logging->Start Recording
3. 进入需要测试电量的场景操作
4. 操作完成后进入开发者选项点击Stop Recording
5. 将iOS设备和Mac连接
6. 打开Instruments,选择Energy Log
7. 选择File->Import Logged Data from Device
8. 保存的数据以时间轴输出到Instrument面板
该方案作为性能测试的补充方案具有较高的权威性,但输出的数据不直观,用于功耗测试的效果并不理想。
4.使用Battery Life进行功耗测试
该APP无需额外费用,输出结果直观(可得到毫安数及百分比)准确,可以尝试使用。





