我们在使用App时会发现有些界面启动卡顿、动画不流畅、列表等滑动时也会卡顿,究其原因,很多都是丢帧导致的;通过上面卡顿原理的简单说明我们从应用开发的角度往回推理可以得出常见卡顿原因,如下:
-
人为在UI线程中做轻微耗时操作,导致UI线程卡顿;
-
布局Layout过于复杂,无法在16ms内完成渲染;
-
同一时间动画执行的次数过多,导致CPU或GPU负载过重;
-
View过度绘制,导致某些像素在同一帧时间内被绘制多次,从而使CPU或GPU负载过重;
-
View频繁的触发measure、layout,导致measure、layout累计耗时过多及整个View频繁的重新渲染;
-
内存频繁触发GC过多(同一帧中频繁创建内存),导致暂时阻塞渲染操作;
-
冗余资源及逻辑等导致加载和执行缓慢;
-
臭名昭著的ANR;
可以看见,上面这些导致卡顿的原因都是我们平时开发中非常常见的。有些人可能会觉得自己的应用用着还蛮OK的,其实那是因为你没进行一些瞬时测试和压力测试,一旦在这种环境下运行你的App你就会发现很多性能问题。