布局绘制流程

CPU 与 GPU

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

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看到更多的蓝色区域

卡顿原理

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

减少以上两部分时间

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

总结

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

谢谢大家支持

  • 希望大家关注,我会不时更新
  • GitHub hunimeizi
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值