Android性能优化----布局过度绘制

Android系统每隔16ms就会发出一次VSYNC信号触发对UI进行渲染,如果这16ms内我们没有完成对视图的绘制,那么就会出现丢帧的情况,从而造成界面卡顿。

检测过度绘制

在设置中打开开发者选项中的调试GPU过度绘制--显示过度绘制区域。

颜色与过度绘制:

原色:没有过度绘制

蓝色:1 次过度绘制

绿色:2 次过度绘制

粉色:3 次过度绘制

红色:4 次及以上过度绘制


优化过度绘制:

1.在theme中去掉Activity中的默认背景色

@null


2.根布局设置了背景色,最好子布局能不设置尽量不设置


3.减少布局的嵌套,尽量避免LinearLayout的层层嵌套,合理使用RelativeLayout。但是说到这里又会引出两个布局的效率问题。我们知道RelativeLayout因为子view是相对依赖的关系,所以在onMeasure的时候会进行两次(LinearLayout有weight权重的时候也执行两次测量),所以在不影响层级的情况下还是尽可能的使用LinearLayout吧。为了优化层级,google大佬也推出了ConstraintLayout约束布局,不过说实话习惯了手动布局,对拖拽控件的方式有点别扭~


4.通过源码来探究RelativeLayout为何会测量两次


可以看到在onMeasure中有一个sortChildren方法,这个方法主要是对水平和竖直方法的子view进行排序整理,可以看到RULES_VERTILCAL和RULES_HORIZONTAL是一个int型的数组,里面存放的是一些相对位置的属性。然后把这些子view存放到mSortedVerticalChildren和mSortedHorizontalChildren数组里,通过名字就可以知道分别是存放垂直方向和水平方向上的view。

最后在onMeasure中对mSortVerticalChildren和mSortedHorizontalChildren里的view遍历测量,所以这就是为什么会测量两次的原因了。

你可能感兴趣的:(Android性能优化----布局过度绘制)