###UI卡顿原理
1. **60fps->16ms**
接下来我将带大家看下这两个数字的原理。其实很多用户感受到的卡顿问题,就是来源于UI渲染。我们知道Android系统**每隔16ms发出信号渲染一次UI**,如果每一次渲染都成功就能达到流畅的画面,如果一次渲染在16ms内无法完成就会让用户感受到卡顿。
我们在滑动listView时有时会感觉到卡顿,这是因为Item结构过于复杂/层级过多,无法在16ms内渲染完毕。
我们知道,**GC在垃圾回收时,所有线程就会暂停工作**,这时很有可能UI在16ms内渲染不完。
2. overdraw
中文意思是过度绘制,它是指同一像素在同一时间被绘制了很多次,这经常出现在**多层级的UI结构里**。
在手机的开发者选项里可以关注overdraw问题,有蓝色、半绿色、半红色、深绿色,我们的目标是**尽量减少红色,尽量出现蓝色**。
###UI卡顿原因分析
- 人为在UI线程做轻微耗时操作,导致UI线程卡顿
- 布局layout过于复杂,无法在16ms内渲染完成
- 同一时间动画执行次数过多
- View过度绘制
- 频繁触发measure、layout
- 内存频繁GC
- 冗余资源或逻辑
- ANR
###UI卡顿问题解决
- layout优化
(1)使用include、merge、viewStub
(2)层级尽量简单
(3)gone替代invisible。视图设为gone不会进行绘制,设为invisible还会绘制。 - listView优化
- 背景和图片等内存分配优化(尽量减少不必要的背景)
- 避免ANR
###最后
以上就是我对UI卡顿问题总结,如有任何疑问欢迎留言提问,博主每天都会查看。