布局绘制流程

CPU 与 GPU

  • CPU的任务繁多,作逻辑计算外,还要作内存管理,显示操做,所以在运行的时候性能会大大折扣,在没有GPU的时代,不能显示复杂的图形,即便GPU工做频率超过了2GHz或者更高,对它绘制图形提升也不大,因此GPU就设计出来了

image

1. 以上图中,CPU中Control为控制器,用于协调整个CPU的运行,包括取出指令,控制其余模块的运行
2. 绿色的为ALU是算数逻辑单元,用于数据逻辑计算
3. 橙色Cache和DRAM分别为缓存和RAM,用于存储信息
*  CUP的控制较为复杂,而ALU较少,所以CPU擅长处理各类复杂逻辑运算,可是不擅长数学尤为是浮点运算
复制代码

XML布局显示到屏幕流程

  1. LayoutInflater方法将布局加载进内存
  2. CPU通过计算将UI对象转换成多维图形
  3. 经过OPENGL调用GPU
  4. GPU对图形进行栅格化
  5. 上述步骤若是在16ms内完成直接在显示器上显示,若是完不成垂直同步等待下一帧完成

为何16ms必须完成绘画

  1. 60fps 在与手机进行交互的时候,如触摸与反馈60帧如下的人是能够感应出来的,60帧以上不能感受到变化
  2. 当频率地狱60帧的时候感受画面卡顿和停滞现象
  3. Android系统会每隔16ms发送VSYNC信号(1000/60=16.66ms),触发对UI进行渲染,若是每次渲染都成功这样就能达到流畅的画面所须要的60fps,为了可以实现60fps,这就意味着计算机渲染大多数操做都必须再16ms内完成

过渡绘制

  1. CPU绘制过程是根据CPU发送的指令来的,他很傻,让他画什么就画什么,16ms就画一次,形成有些图像被其余图像进行覆盖,底下以及面上的图像都要绘制,形成了必要的浪费
  • 过渡绘制的几种状况
    1. 布局层次太深,用户看不到的区域也会被绘制
    2. 自定义View中,onDraw的方法作了过多的绘制

打开开发者选项,开启过渡绘制

  1. 蓝色 过渡绘制一次 无过渡绘制
  2. 淡绿 过渡绘制两次
  3. 淡红 过渡绘制三次
  4. 深红 过渡绘制四次

这表明了4种不一样程度Overdraw状况,咱们的目标是尽可能减小红色,Overdraw看到更多的蓝色区域git

卡顿原理

  1. 将UI对象转换成多边形和纹理
  2. CPU传递数据到GPU,GPU进行绘制

减小以上两部分时间

  1. CPU减小xml转换成对象的时间
  2. CPU减小重复绘制

总结

  1. 性能优化看上去很是高大上,但其实就是细节决定成败,须要对原理性的东西了解清楚,每一步都有什么不同,针对每个步骤进行细致化的优化,性能优化是一种思想,而不是一套具体的操做方法
  2. 布局中的背景是否有须要(主题背景)
  3. 是否能够删除多余布局
  4. 自定义View是否进行了裁剪
  5. 布局是否够扁平化

谢谢你们支持

  • 但愿你们关注,我会不时更新
  • GitHub hunimeizi
相关文章
相关标签/搜索