卡顿测试
1.1什么是卡顿
APP卡顿的问题解释,最多的是在主线程里有严重的耗时操作,页面刷新频率低于16帧/ms导致了卡顿,超过了16ms,而Android系统每隔16ms会发出VSYNC信号重绘我们的界面(Activity)。为什么是16ms, 因为Android设定的刷新率是60FPS(Frame Per Second), 也就是每秒60帧的刷新率, 约合16ms刷新一次
这就意味着, 我们需要在16ms内完成下一次要刷新的界面的相关运算, 以便界面刷新更新. 然而, 如果我们无法在16ms内完成此次运算会怎样呢?
例如, 假设我们更新屏幕的背景图片, 需要24ms来做这次运算. 当系统在第一个16ms时刷新界面, 然而我们的运算还没有结束, 无法绘出图片. 当系统隔16ms再发一次VSYNC息重绘界面时, 用户才会看到更新后的图片. 也就是说用户是32ms后看到了这次刷新(注意, 并不是24ms)
什么情况会导致卡顿
2.1 过于复杂的布局
界面性能取决于UI渲染性能. 我们可以理解为UI渲染的整个过程是由CPU和GPU两个部分协同完成的.
其中, CPU负责UI布局元素的Measure, Layout, Draw等相关运算执行. GPU负责栅格化(rasterization), 将UI元素绘制到屏幕上.
如果我们的UI布局层次太深, 或是自定义控件的onDraw中有复杂运算, CPU的相关运算就可能大于16ms, 导致卡顿。
2.2 过度绘制(Overdraw)
上节说的CPU方面的, 关于GPU的绘制, 如果我们的界面存在Overdraw, 也可能导致卡顿.
Overdraw: 用来描述一个像素在屏幕上多少次被重绘在一帧上. 通俗的说: 理想情况下, 每屏每帧上, 每个像素点应该只被绘制一次, 如果有多次绘制, 就是Overdraw, 过度绘制了
2.3调试Overdraw
Android系统提供了可视化的方案来让我们很方便的查看overdraw的现象: 在"系统设置"-->"开发者选项"-->"调试GPU过度绘制"中开启调试:

此时界面可能会有五种颜色标识:

-
原色: 没有overdraw
-
蓝色: 1次overdraw
-
绿色: 2次overdraw
-
粉色: 3次overdraw
-
红色: 4次及4次以上的overdraw
一般来说, 蓝色是可接受的, 是性能优的.
总结:
(1)主线程内有严重耗时的操作;
(2)有输入输出流、子线程在使用完毕后忘记关闭
(3)Activity的布局层次太深,导致界面过度绘制,从而引起卡顿;
卡顿测试方法:(适用电视淘宝的)
(1)PC和盒子建立连接:adb connect xxx
(2)打开logcat服务,抓取目录下的log并进行保存:adb logcat -v threadtime -b events>/Users/wuchunyu/Documents/log01.txt
(3)响应时间测试场景操作,比如 打开应用中心。
(4)全部操作完毕后,打开log日志,举例:天天特价点击商品耗时,如下



startActivity 是启动首屏,4712ms
HomeActivity 是启动首屏后进入后的第一个 页面,也就是电视淘宝首页,3680ms
NewDetail 进去商品详情页耗时,1217ms
(备注:以第二个时间为准)
ogcat 有缓存,如果仅需要查看当前开始的 log,需要清空之前的。 adb logcat -c && adb logcat 或者
adb logcat -c -b events,清理系统事件信息日志;
ps:其他两种方法
1、通过视频录制,通过播放视频的帧率计算耗时,人为感觉,会有误差;
2、通过工具监控页面activity监控响应;

浙公网安备 33010602011771号