CPU和GPU
名称 | 介绍 | 作用 |
---|---|---|
CPU | 处理器 | 将 UI 对象转换为一系列多边形和纹理(计算画图的方法,可以理解为通过公式画出的矢量图) |
GPU | 相当于显卡 | 将纹理栅格化(将位图画到屏幕上) |
60Hz 刷新频率由来
- 12 fps :由于人类眼睛的特殊生理结构,如果所看画面之帧率高于每秒约 10-12 帧的时候,就会 认为是连贯的
- 24 fps :有声电影的拍摄及播放帧率均为每秒 24 帧,对一般人而言已算可接受
- 30 fps :早期的高动态电子游戏,帧率少于每秒 30 帧的话就会显得不连贯,这是因为没有动态模 糊使流畅度降低
- 60 fps 在与手机交互过程中,如触摸和反馈 60 帧以下人是能感觉出来的。 60 帧以上不能察觉 变化
- 当帧率低于 60 fps 时感觉的画面的卡顿和迟滞现象
Android 系统每隔 16ms 发出 VSYNC (垂直同步)信号 (1000ms/60=16.66ms) ,触发对 UI 进行渲染, 如果每次渲染都成 功这样就能够达到流畅的画面所需要的 60fps ,为了能够实现 60fps ,这意味着计算渲染的大多数操作都必须 在 16ms 内完成。
卡顿原理分析
当一帧画面渲染时间超过16ms的时候,垂直同步机制会让显示器硬件等待GPU完成栅格化渲染操作,这样会让一帧画面多停留16ms,甚至更多,这样就造成了丢帧,也让用户看起来画面停顿

16ms所干的2件事情
1、将UI对象转换成一系列多边形和纹理
2、CPU传递数据到GPU
优化方案
1、过渡绘制优化(减少GPU工作量)
位置:开发者选项-->调试GPU过渡渲染-->显示过渡绘制区域

蓝色:过渡绘制1次
淡绿:过渡绘制2次
淡红:过渡绘制3次
深红:过渡绘制4次及以上
1.1减少背景重复
非业务需要,不要去设置背景
1.2主题中设置背景
1.2.1去掉单个主题设置背景
可以在setContentViewer之前
getWindow().setBackgroundDrawable(null);
1.2.2 去掉所有Activity中主题设置中的属性,直接在style.xml中设置,之后在Activity中单独设置背景
<item name="android:windowBackground">@null</item>
2、 自定义View 使用裁剪 减少空间指间的重合部分
Android7.0 后系统优化,invalidate()方法不在执行测量和布局动作
3、布局优化
3.1减少不必要嵌套
3.2使用merger避免与父容器重复

可以看层级
总结
- 布局是否有重复背景
- 是否可以删除多余布局(容器只有一个子节点容器ScrollView-->LinearLayout)
- 自定义View是否进行裁剪
- 尽可能把相同的容器核名merge
- 能服用代码,用include处理,因为GPU处理过,下次会从缓存中读取
网友评论