序言
在开发app时,我们经常会提及一个词,卡顿。因为肉眼可接受的最低流畅度,为60帧/s。所以,当1秒内无法绘制到足够的帧数时,从肉眼看,就会表现为卡顿。因此,要确保每秒能够绘制到足够的帧数,平均地讲,我们需要确保每帧的绘制时间不高于16.6ms(1s % 60 == 1000ms % 60 ~= 16.6ms)。如何尽量确保每帧的绘制时间低于这个值。我们需要先知道,究竟是什么在耗时,这样才能对症下药,而这也是我们这篇文章所要探讨的。
一、GPU渲染分析。
- 开启渲染监控。开发者模式->监控->GPU呈现模式分析->条形图。如下图所示:
- 条形图分析。这里颜色种类比较多,我们只讲几个重要的。
- 深蓝色。表示onDraw()方法的执行时长,该方法越耗时,对应色就越长。
- 浅绿色。表示onMessure/onLayout的执行时长,这两个方法越耗时,对应色也越长。
- 黄 色。表示CPU等待GPU执行绘制的时间,GPU执行绘制越久,对应色也越长。
- 红 色。表示Open GL执行由Android 2D 渲染器发送过来的,需要绘制/重绘的渲染列表。总的需要渲染的任务越多,执行的时间越长,则对应色也越长。
- 浅蓝色。表示发送位图信息到GPU的时间,需要绘制的图片越大,越多。对应色也越长。(这里只是发送,还没绘制…)
- 深绿色。表示在连续的2帧绘制之间,所占用的时间。正常情况下,绘制完第1帧,会马上开始执行第2帧的绘制。但如果,在绘制完第1帧后,在绘制第2帧之前,因为第2帧的计算、测量或其它操作,导致耗时过多。则会导致第2帧绘制的总时长变长,进而可能导致卡顿。当深绿色过多时,可以排查一下,是不是有些计算任务可以交给非UI线程去处理。
… 待续
|