约束布局与其他布局相比是否昂贵?

时间:2017-10-06 03:31:09

标签: android android-constraintlayout

当我意识到ConstraintLayout有:

  • 更好的布局拖放

  • 通过更好的命名更好地查看相对设置" top-toBottomOf"

  • 使用比率和百分比指南更好地进行布局构建

  • 更多的不能在这里或我只是不知道

我一直想要经常使用它因为它太舒服了。

就像标题一样,我很好奇 ConstraintLayout在不断使用时会产生很大的性能影响吗?

声明您的意见和证据将受到赞赏。

欢迎编辑,如果你有良好的版本/语法,并且下来投票请在结论下面留下你的评论。感谢Dennis进行语法修正。

2 个答案:

答案 0 :(得分:4)

  

与其他人相比,约束布局是否昂贵?

取决于您的使用情况ConstraintLayout就像类固醇上的RelativeLayout一样。

如果你想要一个简单的2-3 ChildViews布局,那么使用ConstraintLayout将不会那么高效。转到线性布局。

ConstraintLayout 的主要目的是修复 RelativeLayout 的问题,并且它做得很好。你可以做很多事情,这是不可能的 RelativeLayout 。您可以像以前一样简化布局。此外,它还修复了RelativeLayout的长期性能问题。度量/布局阶段的双重征税所以我们在一个不错的包装中获得了更好的性能,更多功能和更简单的布局。“

由于性能改进是创建这种新布局的主要原因,我做了一些性能测试来检查是否符合这个目标。

我比较了RecyclerView中使用的布局。没什么太花哨的,只是一些嵌套的LinearLayout和RelativeLayout容器。我将此布局手动移至ConstraintLayout并进行了一些相当粗糙的性能测试。

在使用新的ConstraintLayout时,在仿真器和Nexus 5上比较这两者会产生性能损失。

表现最差的是测量。 onMeasure()方法大约需要用于比较的LinearLayout的十倍。并且它占用了大部分时间,花费的时间约为onLayout()的60倍。因此,与所讨论的LinearLayout相比,ConstraintLayout的onLayout()方法的30%命中率几乎无关紧要。最后,使用ConstraintLayout的布局膨胀也更长而不是使用LinearLayout。

ConstraintLayout执行大量计算以找出显示其每个子节点的位置和方式。内部(至少)三个相当冗长的类正在一起工作以获得结果:LinearSystemConstraintWidgetConstraintWidgetContainer。为了充分理解性能行为,我必须深入研究这些类的深度(为此,我更喜欢在Google发布其源代码时的注释类)。但只是粗略地看一下反编译代码,看起来这些类必须做很多事情。

一些烦恼

但是,目前并非所有人都能完美地工作。现在这些事情最让我困扰的是:

  • 蓝图更改与设计预览之间存在明显滞后 变化
  • 预览并不总是正确的
  • 蓝图视图不注意文本布局约束
  • 约束并不总是按预期工作
  • 撤消工作非常不可靠

编辑器会以意想不到的方式更新内容或更改内容

post支持ConstraintLayout。

就个人而言,当我想对齐3个以上的视图时,我只使用ConstraintLayout。它易于使用但同时在开始时很烦人。

<强> TL:博士 enter image description here

答案 1 :(得分:0)

约束布局提高了性能,阅读了android开发者博客上的this文章,它明确指出,ConstraintLayout在测量/布局阶段的表现比RelativeLayout高出约40%

enter image description here