App耗电量测试方法

背景

本文主要介绍我们测试App耗电量的方法思路,然后带你找到耗电元凶。

采集数据

开始测试前,连接usb,在命令行执行命令:
C:\Users\xxx>  adb shell dumpsys batterystats --reset  //清空手机电量数据,开始一次新的测试
C:\Users\xxx>  adb shell dumpsys batterystats --enable full-wake-history  // 设置让手机记录所有唤醒CPU的wakelock数据
                                                               // 注意,github文档里提到,设置 full wakelock 之后,一段时间后可能会造成电量日志数据溢出,建议测试3到4个小时,但是目前测试较长时间也没有碰到溢出的情况。
然后可以操作自己的业务,比如:登录、主要页面加载数据等。
操作一段时间后,将app放到后台同时锁屏。并拔掉USB线。

经过12个小时(暂定12个小时,上面也提到,可能会出现日志溢出的问题,但是目前还没碰到),再重新连上USB线。在命令行执行:
C:\Users\xxx> adb bugreport bugreport.zip   //对于Android7.0或者更高版本的系统
C:\Users\xxx> adb bugreport > bugreport.txt // 对于Android6.0以以下的系统

// 有的设备可能无法使用bugreport,这时候可以使用dumpsys batterystats只获取电量数据
C:\Users\xxx> adb shell dumpsys batterystats > batterystats.txt   // 这里面存放的都是电量数据,不过在bugreport中是包含这份电量数据的。

分析数据
bugreport数据分析

我们先来分析bugreport的数据,这里要使用到一个工具battery-historian。
对于利用battery-historian如何分析问题,我们这里可以查看另外一篇文章:battery-historian的使用

batterystats数据分析

如果设备无法使用bugreport,那么也可以使用adb shell dumpsys batterystats > batterystats.txt只获取电量相关数据。
对于batterystats的数据,我们也可以使用battery-historian scripts/historian.py来转换成一个html文件(battery-historian 1.0版本),但是我试了下,体验不是特别好。
这里建议直接进行分析,其实思路都比较类似。
    建议使用notpad++打开batterystats.txt文件。
    先通过【 Estimated power use (mAh)】关键字来过滤耗电排行。
    如果发现测试app耗电,再通过其Uid查看具体的消耗情况。可以通过UId进行过滤。
    如果发现wakelock有问题,可以通过过滤wakelock的名字,在notepad++中通过【在当前文件中查找】来查看wakelock的获取和释放是否正常,另外查看wakelock的间隔是否正常。

测试数据标准

待完善

总结

电量测试用软件方式替代功耗仪,还需要大量的测试来完善测试结果。比如我们展示哪些数据等等。
后续会不断更新测试最优的测试方案。

消耗电量包括 
唤醒锁\SyncManager同步管理器\音视频\流量.

优化方式: 
(1) 检查所有唤醒锁, 是否存在冗余或者没用的位置. 
(2) 集中相关的数据请求, 统一发送; 精简数据, 降低无用数据的传输. 
(3) 分析和统计等非重要操作, 能够在电量充足或连接WIFI时进行, 參考JobScheduler. 
(4) 精简冗余的服务(Service), 避免长时间运行耗电操作. 
(5) 注意定位信息的获取, 使用后及时关闭.

猜你喜欢

转载自blog.csdn.net/github_35707894/article/details/79740331