UI卡顿
UI卡顿是轻量版的ANR
1、 UI卡顿的原理
1. **60fps --> 16ms**:1s内绘制60帧,所以每一帧的绘制时间在16ms
2. overdraw,大量重叠的布局或者背景被重复绘制
2. UI卡顿原因分析
1. 人为在UI线程中做轻微的耗时操作,导致UI线程卡顿;
2. 布局Layout过于复杂,无法再16ms内完成渲染
3. 同一时间动画执行的次数过多,导致cpu或者gpu负载过重
4. view的过度绘制,导致某些像素在同一帧时间内被绘制多次,使cpu或者GPU负载过重
5. View频繁的触发measure、layout,导致measure、layout累计耗时过多及整个View频繁的重新渲染
6. 内存频繁触发GC过多,导致暂时阻塞渲染操作
7. 冗余资源及逻辑等导致加载和执行缓慢
8. ANR
3. UI卡顿总结
1. 布局优化
1. 使用`<include>`,`<merage>`,`<ViewStub>`来进行优化
2. 不要有过于复杂的嵌套或者冗余布局
3. 使用gone代替inVisible(gone的控件不会绘制)
4. 复杂嵌套的控件使用简单的自定义view替代
2. 列表及Adapter优化
1. 复用currentView
2. 监听滑动,滑动时不加载图片和数据,滑动完成后再进行
3. 背景和图片等内存分配优化
1. 减少不必要的背景设置
2. 图片进行压缩或者裁剪,尽量少浪费多余的内存
3. 避免频繁GC回收造成丢帧现象
4. 避免ANR
开启子线程做耗时操作,常用安卓提供的异步框架:Handler,AsyncTask,IntentService,HandlerThread。