内容
RelativeLayout、LinearLayout、FrameLayout、ConstraintLayout这四种类型的measure、layout、draw耗时对比。java
测试试图结构:
测试方式
使用一个结构很是深的试图结构,重复执行measure、layout、draw各1000次。计算耗时。web
结果(单位:ms):
总结
- 能够看出,各类布局除了measure差异比较大外,layout和draw耗时差异不大。
- RelativeLayout在measure这一步耗时贼JB严重。是由于相对布局须要给全部子View水平方向测量一次,再竖直方向测量一次,才能肯定每一个子View的大小。层级一旦太深,measure时间以指数上升。
- 若是能够,在不增长嵌套的状况下,尽可能使用FrameLayout。FrameLayout可以实现重心,经过Gravity来实现。别老爱用RelativeLayout的AlignParentxxx属性
- LinearLayout若是子View的LayoutParams里有使用weight属性的话,measure时间和RelativeLayout几乎接近,由于也须要给每一个子View测量两次。
- ConstraintLayout是Google新推出的一个布局,在性能上比RelativeLayout好,比LinearLayout差一些。
- 尽可能少写层级深的布局,能减小一个试图节点就少一些measure时间