本文内容:基于Android基础性能检测与分析
版权声明:本文为原创文章,未经允许不得转载
前言
最近一段时间以来,开始深入学习App的性能检测、分析和优化等方面的内容,接触的越多越发现相关的技能点太多了,而且说起来容易做起来难。尤其是学习到持续自动化框架的方案和搭建,才觉得自己了解的不过是冰山一角。只能说,学无止境,任重而道远!
不过,在学习的过程中,发现了很多非常实用的技巧以及很棒的性能优化和检测工具,能够帮助自己及时发现程序的一些问题,比如UI界面的性能、启动时间的优化、OOM异常、内存泄露、电量分析等,并且对自己的软件的整体性能有一个综合的分析。
本文主要的研究方向都是来自与《Android 群英传 之神兵利器》,只不过小编整理了内部较为实用的内容,然后深入研究了一下。
GO!GO!GO!
1.UI性能分析
目标:减少绘图和显示数据的等待时间,使帧率更加平稳、连贯,给人更好的视觉体验。
- 16msUI绘制准则
一般来说,Android设备的屏幕刷新率为60帧/s,要保持画面流畅不卡顿,要求每一帧的时间超过1000/60=16.6ms,这就是16ms的黄金准则,如果中间的某些帧的渲染时间超过16ms,就会导致这段时间的画面发生了跳帧,因此原本流畅的画面变发生了卡顿。
在Android 5.0之后,系统增加了Render Thread(渲染线程),来进行异步绘制,即使某一帧发生延迟也不会影响下一帧的绘制。
在手机的开发者选项中打开Pofile GPU Rending(剖析GPU渲染)选项,就可以看到底部的柱状图,表示的就是渲染的时间。一条绿色的横线表示的就是16ms(17ms)基准线,如果高于该线,就表示人眼会觉得绘制的不流畅。通过这种方式,就可以数据化的分析界面的流畅度,然后再逐步找到问题所在,优化我们的界面。
在Android Studio中,Android Monitor->Monitors->GPU界面也可以看到该信息,但是要求安装AS插件,并且要求向手机安装追踪GPU渲染数据的应用,要求手机有root权限才可以。
- 布局
如果使用LinearLayout,则一定要保证层级不能太深,google官方建议用户界面的View不宜超过8层;
如果使用RelativeLayout,则一定要尽量避免嵌套,因为相对布局在测量的时候往往需要多次测量,嵌套时十分耗时。
eg:可以使用include标签进行view的复用;使用drawableleft方法来进行控件组合。
最根本的还是尽量减少View的数量。
- 图形过度绘制
如果控件出现了叠加,而且都有背景,就会造成重叠部分多次绘制,浪费了资源和时间。可以打开开发者选项中的Debug GPU Overdraw,可以检测过渡绘制,即一块区域经过了几次叠加绘制:
原色:没有过度绘制
蓝色:1次过度绘制
绿色:2次过度绘制
粉色:3次过度绘制
红色:>=4次过度绘制
修改建议:
①控件尽量避免重叠摆放;
②当控件与主背景色颜色相同时,移除不需要背景色;
③自定义view在绘制的时候,使用clipRect属性减少重绘区域。
2.应用启动时间计算以及程序启动白屏问题
这里的应用启动时间指的是,安装完应用以后的第一次启动,这也是评判一个App性能好坏的重要指标,直接影响用户的对应用的第一印象。
可以通过ADB命令来统计应用从打开到开启第一个界面的时间:
<