随着移动互联网的快速发展,手机的实用性、娱乐性愈来愈强。平常使用中发现,安装了应用后,即便不怎么使用,电量也会消耗很快。但若是恢复出场设置充满电后,手机能够待机很长时间。真相只有一个:手机耗电的最终元凶是软件。android
在各大应用市场中搜索“电量管理”相关应用,每一个应用都有几万到几十万次的下载量。这说明,愈来愈多的用户开始关注应用电量问题。因此,在研发阶段,有效的检测和定位电量问题,是十分重要的工做。微信
如何可以有效的检测和定位应用的电量问题呢?能够从两个方面入手:一方面,从手机系统入手,了解ROM对应用电量消耗的统计原理,进而从代码层规避没必要要的电量消耗。另外一方面,从应用自己入手,在保证用户体验的前提下,尽量减小没必要要的操做。网络
下面分享下,在对应用电量优化过程当中所作的专项测试工做。工具
小结:能够看出,目前业界现有的电量测试方法不少。除了借助于其余设备监测整机电量消耗的硬件测试方案外,android系统也提供了各类获取应用电量消耗的方法。性能
方法各有优点。但,都是定位于获取总体电量消耗(整机、应用)。对于开发和测试人员最关注的问题:有效定位致使应用电量消耗的具体缘由,仍然没法解决。测试
在产品研发阶段,可以快速获取应用电量消耗,准肯定位问题缘由的测试方法,是开发和测试人员最须要的方法。因此,从2016年初开始,咱们肯定了电量测试工做的开展方向:优化
一、理清原理:Android系统电量统计原理;spa
二、调整策略:关注整机的硬件测试方案替换为关注APP的软件测试方案;操作系统
三、准肯定位:获取更详细的数据;命令行
四、提高效率:自动化电量测试方案建设。
在对业界现有测试工具的了解中,咱们发现Android提供了对应用电量统计的系统工具“耗电排行”。
经过解包ROM源码并反编译Settings.apk,找到了Android系统对应用电量消耗统计的接口:com.android.internal.os.BatteryStatsHelper(5.0以后类名)中的方法processAppUsage。该方法中统计了系统对应用各部分的电量消耗:
在解读源码的过程当中,发现了一个有意思的文件power_profiler.xml。该文件中列出了手机厂商针对机型硬件定义的单位时间元器件电量消耗值。因为文件内容的差别,从而致使了,一样的应用、一样的操做场景、一样的外界环境,在不一样手机上电量消耗不一样。
不一样手机power_profiler.xml
文件
小结:经过解读源码,掌握到系统对应用电量消耗的统计方法。若是能够在测试过程当中获取到组成应用总体消耗的各部分的消耗值,就能够大致定位到问题方向。
硬件测试采集的是整机的电流值,因为外接干扰因素的影响其余应用、手机环境、网络环境、人为因素等,常常致使的测试结果是:数据波动大、没法定位缘由。而且,随着手机硬件、外观的调整,愈来愈多的机器没法自主拆卸电池,而厂商对内置版本的电量要求却愈来愈严格。目前现有的硬件测试方案,没法继续知足在研发阶段对应用电量的有效保障。
既然Android系统已经提供了对单个应用的电量统计应用,咱们就能够利用源码并结合实际的需求,对已有的系统工具进行二次开发,经过软件的方式完成对单个应用耗电量的测试。
理清了系统对应用的电量统计原理后,咱们发现“耗电排行工具”并无详细输出组成应用整体电量消耗的每一部分的消耗值。因此,在解决“准肯定位”的问题上,首先可以作的工做就是进一步细化数据。
“工欲善其事必先利其器”。
咱们开发了如下两个工具,支持获取更详细的数据。
【工具一:PowerStat2.0】
该工具是对系统“耗电排行工具”的二次开发。使用系统计算公式和API进行计算。
相比较原工具,完善如下几个特性:
一、数据展现:除了展现组成应用整体电量消耗的每一部分的消耗值,同时显示使用时长、次数及数据传输量信息;
二、传感器细分;
三、展现power_profiler.xml
;
四、提供定时测试功能。
【工具二:CPUMonitor】
经过平常监控和用户反馈发现,致使应用电量消耗升高的最多见问题是CPU问题:
华为手机用户反馈电量问题
平常监控电量异常升高问题
依据操做系统的概念—进程是由一个或多个线程组成,能够将“准肯定位”问题进一步细化到获取线程的CPU时间片消耗。
为了可以在电量测试的同时进行CPU时间片数据的采集,并尽量减小其余消耗的引入,咱们开发了一个手机端的数据采集工具:CPUMonitor。原理以下:
工具具有如下几个特性:
一、广播做为工具驱动方式,方便应用于自动化脚本控制;
二、数据源取自系统:权威、详细;
三、多样的采集模式:频繁模式(freq)、触发模式(lazy)。
优点:
一、安装使用无权限要求;
二、可与电量测试同时进行;
三、数据取自系统保证准确性;
四、触发模式保证了最小性能消耗。
小结:目前,工具已经应用于多个移动端应用的电量测试中。除了能够高效定位电量问题外,还能够在功能开发前预估电量消耗,从产品层协助策略制定。经过自研工具的开发,有效的将原有的硬件测试方案替换成关注应用电量消耗的软件测试方案。自研工具获取的数据,所有来自于系统提供的接口,保证了数据的准确有效性。
经过测试工具的开发,在一次电量测试过程当中,已经能收集到帮助定位问题的足够详细的测试数据。因此,咱们下一步须要思考的就是,如何可以更加高效更加精准的获取测试数据?
原有的电量测试流程:
存在的问题:
一、人工操做:设备链接、环境清理、应用安装、工具设置、初始数据采集;
二、人工操做:设备断开、场景操做执行、计时;
三、人工操做:设备链接、数据采集&保存。
人工干预每一个环节致使:数据准确性低、执行效率低。
各环节的优化方案:
数据采集:脚本驱动+测试工具 替代 手动执行命令行;
操做执行:自动化脚本 替代 手工操做;
流程控制:PC控制 替代 人工控制。
优化后的电量测试流程:
解决需人工链接设备的问题:将传统的USB线中间增长硬件控制模块后,可由PC端的脚本控制硬件的断开链接。
解决USB链接断开后场景操做的执行问题:传统的解决方案:将自动化脚本放到手机端执行。
存在的问题:手机必需要有root权限。
解决的方案:adb无线控制,下发指令。
小结:经过全流程的自动化处理,减小人工干预,除了提升数据的准确性外,有效的提高了测试效率。以1小时待机电量测试为例,原测试流程和自动化测试流程相比较:
总结下咱们在电量测试方面所作的工做:
一、经过对Android系统电量统计原理的分析,清晰的掌握到组成APP总体电量消耗的每一部分的消耗值,从而能够直接定位致使电量问题的大致方向。
二、经过测试工具的开发,获取到更加详细的功耗数据,从而能够直接定位到具体代码逻辑。
三、经过电量测试的自动化建设,有效提高测试效率,除了缩短测试时长、减小人力投入外,还提升了测试数据的准确性。
电量测试方案应用于移动终端产品,除了能快速检测定位电量问题外,还能够协助开发及产品评估新增功能带来的额外消耗。
经过一年多的工做,咱们总结出一套理论与实践相结合的电量优化检测方法:
理论:在了解系统对应用电量统计原理的过程当中,发现对wake lock消耗的计算在方法processAppUsage()中是没有进行条件判断的。也就是说,若是在亮屏时,代码逻辑中仍然注册了wake lock(测试的wake lock是没有任何意义的),在对应用进行电量统计时,就会计算上这部分的消耗:
在写代码时,能够注意下,在进行wake lock注册时,首先要判断手机的状态。
实践:在对多个应用进行电量测试的过程当中,发现不一样产品根据产品特性不一样,除了共性致使电量异常的问题外,还会存在产品特性相关的操做场景。
咱们抛开产品,抽离出共性问题,整理成下面这个表格:
在用例设计部分,咱们将待机列为须要关注的场景,是由于用户对待机时应用的电量消耗更为敏感。而在这个场景下,常常会出现因为代码逻辑问题、产品策略问题致使应用电量消耗异常。在操做过程当中的电量消耗,是用户预知的消耗。但若是使用不当,也会形成异常消耗。
想知道更多测试相关干货 请关注咱们的微信公众号:腾讯移动品质中心TMQ。