安卓耗电作为安卓性能测试的大头,是测试,开发,乃至产品都非常关注的一个指标。一个应用不管多么好用,如果有严重的耗电问题,就离被卸载的结果不远了。那么如何测试安卓耗电呢,可以先参考笔者之前一个帖子,先做好一些准备工作,再继续阅读本文。
(参考:安卓性能测试浅谈 https://testerhome.com/topics/17981)
测试 APP 的耗电量之前,我们先了解一下,APP 因为什么而耗电,以下几项是耗电的真凶:
1.cpu 耗电量
2.wake lock 耗电量
3.移动数据耗电量
4.wifi 流量耗电量
5.wifi 维持耗电量\wifi 扫描耗电量
6.传感器耗电量
以上几项是笔者之前从安卓系统 5.1 源码总结出来的,有兴趣的童鞋可以去查看最新版本的源码,估计不会差太多。
一般的 APP,用户停留时间不是很长的,只要关注以下几点,基本都可以保证 APP 没有严重的耗电问题:
1.没有长时间的持有 wake lock
2.没有大量的异常网络情况
3.没有长时间的使用传感器
4.APP 退出前台后,cpu 没有长时间的占用
在笔者写的安卓性能测试浅谈中提到,要做性能测试前要先确定好测试内容,设计的场景是用户经常使用的场景。
安卓耗电有多种测试方法:
1.在手机查看应用耗电量 (方便,但没有详细耗电信息)
2.使用性能测试 APP 查看应用耗电量 (适合测试一段时间内的应用耗电量)
3.使用 adb shell batterystats 查看应用耗电量 (有详细耗电信息,具体到 cpu, 网络,传感器等)
4.测试 APP cpu 占用率和 cpu trace 信息 (排除掉网络,传感器等耗电因素,只关注 cpu 耗电。使用 android studio 可以详细分析到底是什么操作导致耗电)
当我们发现 APP 在某段时间或者某些场景特别耗电的时候,我们可以先通过 adb shell batterystats 命令发现是否存在除 cpu 外的耗电因素。如果确定了只有 cpu 耗电,那就可以通过 android studio 抓取 trace 信息,更加精确地分析是什么操作在占用 cpu。(用 android studio 分析需要使用 debug 模式的包)
笔者在上家公司遇到一种情况是在测试环境测试 APP 时没有发现耗电的问题,但是用户反馈耗电很严重。后来排查到是在运营推送 GCM 消息的时候,APP 会持有 wake lock,并且没有释放掉。这种在测试环境很难发现的问题,只能通过用户反馈激增时间和当时的运营活动时间去联系了。
在保证 APP 没有前面说到的严重问题后,还想继续对耗电方面进行优化,可以在以下方面入手:
1.减少动画的不必要执行
2.使用 job schedule,定时执行批量事件
3.Android Doze 模式
4.减少频繁的网络请求,比如:上传埋点信息,下载图片,拉取配置等,对请求的时机进行优化,优先考虑在 wifi 环境下进行。