布局渲染与优化

前言
image-20200828155733214.png

黄色的Control为控制器,用于协调控制整个CPU的运行,包括取出指令、控制其他模块的运行等;
绿色的ALU是算术逻辑单元,用于进行数学、逻辑运算;
橙色的Cache和DRAM分别为缓存和RAM,用于存储信息

从结构图可以看出,CPU的控制器较为复杂,而ALU数量较少。因此CPU擅长各种复杂的逻辑运算,但不擅长数学运算尤其是浮点运算

CPU与GPU工作流程
image-20200828162708419.png
卡顿原因分析

Android系统每隔16ms发出VSYNC信号(1000ms/60=16.66ms),触发对UI进行渲染,如果每次渲染都成功,这样就能达到流畅棉花所需要的60fps。

image-20200828165004059.png

当这一帧画面渲染时间超过16ms的时候,垂直同步机制会让显示器硬件等待GPU完成栅格化渲染操作,这样会让这一帧画面多停留16ms甚至更多,这样就造成了用户看起来画面停顿。

优化方向

解决卡顿从两方面入手:

(1)CPU减少xml转换成对象的时间

(2)GPU减少重复绘制的时间

GPU过度绘制的几种情况

(1)自定义控件中,onDraw方法做了好多重复绘制

(2)布局层次太深,重叠性太强。用户看不到的区域GPU也会渲染,导致耗时

工具的使用

Hierarchy Viewer目前已经处于废弃状态

image-20200828164350774.png

绿: 表示该View的此项性能比该View Tree中超过50%的View都要快;例如,代表Measure的是绿点,意味着这个视图的测量时间快于树中的视图对象的50%

黄: 表示该View的此项性能比该View Tree中超过50%的View都要慢;

红: 表示该View的此项性能是View Tree中最慢的

Layout Inspactor

image-20200828164605319.png

Lint建议

你可能感兴趣的:(布局渲染与优化)