CPU 与 GPU
- CPU的任务繁多,作逻辑计算外,还要作内存管理,显示操做,所以在运行的时候性能会大大折扣,在没有GPU的时代,不能显示复杂的图形,即便GPU工做频率超过了2GHz或者更高,对它绘制图形提升也不大,因此GPU就设计出来了
1. 以上图中,CPU中Control为控制器,用于协调整个CPU的运行,包括取出指令,控制其余模块的运行
2. 绿色的为ALU是算数逻辑单元,用于数据逻辑计算
3. 橙色Cache和DRAM分别为缓存和RAM,用于存储信息
* CUP的控制较为复杂,而ALU较少,所以CPU擅长处理各类复杂逻辑运算,可是不擅长数学尤为是浮点运算
复制代码
XML布局显示到屏幕流程
- LayoutInflater方法将布局加载进内存
- CPU通过计算将UI对象转换成多维图形
- 经过OPENGL调用GPU
- GPU对图形进行栅格化
- 上述步骤若是在16ms内完成直接在显示器上显示,若是完不成垂直同步等待下一帧完成
为何16ms必须完成绘画
- 60fps 在与手机进行交互的时候,如触摸与反馈60帧如下的人是能够感应出来的,60帧以上不能感受到变化
- 当频率地狱60帧的时候感受画面卡顿和停滞现象
- Android系统会每隔16ms发送VSYNC信号(1000/60=16.66ms),触发对UI进行渲染,若是每次渲染都成功这样就能达到流畅的画面所须要的60fps,为了可以实现60fps,这就意味着计算机渲染大多数操做都必须再16ms内完成
过渡绘制
- CPU绘制过程是根据CPU发送的指令来的,他很傻,让他画什么就画什么,16ms就画一次,形成有些图像被其余图像进行覆盖,底下以及面上的图像都要绘制,形成了必要的浪费
- 过渡绘制的几种状况
- 布局层次太深,用户看不到的区域也会被绘制
- 自定义View中,onDraw的方法作了过多的绘制
打开开发者选项,开启过渡绘制
- 蓝色 过渡绘制一次 无过渡绘制
- 淡绿 过渡绘制两次
- 淡红 过渡绘制三次
- 深红 过渡绘制四次
这表明了4种不一样程度Overdraw状况,咱们的目标是尽可能减小红色,Overdraw看到更多的蓝色区域git
卡顿原理
- 将UI对象转换成多边形和纹理
- CPU传递数据到GPU,GPU进行绘制
减小以上两部分时间
- CPU减小xml转换成对象的时间
- CPU减小重复绘制
总结
- 性能优化看上去很是高大上,但其实就是细节决定成败,须要对原理性的东西了解清楚,每一步都有什么不同,针对每个步骤进行细致化的优化,性能优化是一种思想,而不是一套具体的操做方法
- 布局中的背景是否有须要(主题背景)
- 是否能够删除多余布局
- 自定义View是否进行了裁剪
- 布局是否够扁平化
谢谢你们支持