Android中UI卡顿的罪魁祸首就是丢帧;那什么是丢帧呢?
在android中把app流畅的帧率规定成60fps,帧率只有在达到60fps或以上时,才认为此应用不会出现我们本文所说的UI卡顿;
补充:由于人眼自身的原因,其实帧率保持在60fps~75fps就足够啦,太大也没什么意义;
下面我们来分析下有哪些操作会导致丢帧呢?
通过换算我们知道:尽量保证每次在16ms内处理完所有的CPU/GPU计算,绘制,渲染等操作,否则会出现丢帧卡顿的现象;
常见造成卡顿原因有以下几点:
1、在UI线程中做了轻微耗时工作,导致UI线程卡顿;
2、布局(Layout)过于复杂,无法在16ms内完成渲染;
3、View过度绘制,导致某些像素在同一帧时间内被多次绘制,造成CPU/GPU负载过重;
4、View频繁触发measures、layout等操作,导致它们累计耗时时间过多及整个VIew的频繁渲染;
5、同一时间内动画执行次数太多,导致CPU/GPU负载过重;
6、频繁触发系统GC操作,导致渲染暂时被阻塞;
7、冗余资源及逻辑导致加载与执行缓慢;
8、ANR;
补充一个常识:虚拟机在执行GC垃圾回收操作时,所有线程(包括 UI线程)都需要暂停,当GC操作完成以后才能够继续执行;