UI卡顿相关
2017-09-28 本文已影响7人
刘尔泽
UI卡顿原理
60 fps -->16ms
卡顿,主要是渲染。
一秒60帧, 在16ms内完成计算渲染,操作。
在绘制的时候 大量的gc
overdraw 过渡绘制,减少红色。
UI卡顿原因分析
- 人为在UI线程中做轻微的耗时操作,导致UI线程卡顿。
android不是线程安全的,线程间通信 handler。 - 布局Layout 过于复杂,无法在16ms内完成渲染
- 同一时间动画执行的次数过多,导致CPU或GPU负载过重
- View过度绘制,导致某些像素在同一帧时间内被绘制多次,从而使CPU 或GPU负载过重
- View 频繁的触发measure / layout ,导致 measure / layout 累计耗时过多 及整个View 频繁的重新渲染
- 内存频繁出发gc 过多,导致暂时阻塞渲染操作
- 冗余资源及逻辑导致加载执行缓慢
- ANR (轻量版)
总结
- .布局优化,include ,merge ,尽量不要嵌套,GONE 不会绘制,invisible 会绘制,尽量使用weight
- 列表及Adapter 优化, adapter 的 getview。 滑动时候,只有在滑动停止的时候 再去加载图片,更新元素,可以在滑动时候显示缩略图
- 背景和图片等内存分配优化,尽量减少不必要的背景
- 避免ANR android 中的异步消息框架,Handler,AsyncTask, IntentService ,HandlerThread