与其他相比,约束布局昂贵吗?

nyc*_*ing 2 android android-constraintlayout

当我意识到ConstraintLayout有:

  • 更好的布局拖放

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

  • 具有比率和百分比准则的更好的布局构造

  • 还有更多无法说明的地方,或者我只是不知道

我一直想经常使用它,因为它是如此舒适。?

就像标题一样,我很好奇ConstraintLayout在不断使用它时是否会对性能产生重大影响?

声明您的意见和证据将不胜感激。

如果您拥有良好的版本/语法,欢迎进行编辑,并且不赞成投票,请在评论下方留下您的结论。感谢Dennis进行语法校正。

Den*_*nis 5

与其他相比,约束布局昂贵吗?

取决于您的用法。A ConstraintLayout类似于RelativeLayout类固醇。

如果您想要一个简单的2-3 ChildViews布局,那么使用ConstraintLayout不会那么有效。去线性布局。

ConstraintLayout的主要目的是修复RelativeLayout的问题,而且它做得很好。您可以执行RelativeLayout所无法完成的许多事情。并且您可以像以前从未有过的那样简化布局。此外,它解决了RelativeLayout的长期性能问题。在度量/布局阶段进行了双重评估。因此,在一个不错的程序包中,我们可以获得更好的性能,更多的功能和更简单的布局。”

由于性能改进是创建此新布局的主要原因之一,因此我进行了一些性能测试,以检查是否满足此目标。

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

在使用新的ConstraintLayout时,在模拟器和Nexus 5上进行比较会导致整体性能下降。

表现最差的是测量。该onMeasure()方法大约是我用于比较的LinearLayout的十倍。而且它花了大约60倍的时间消耗大部分时间onLayout()。因此,与所讨论的LinearLayout之一相比,ConstraintLayout的onLayout()方法的命中率几乎没有关系。最后,使用ConstraintLayout进行布局膨胀所花费的时间也比使用LinearLayout所花费的时间更长

ConstraintLayout进行了大量计算以找出在何处以及如何显示其每个子项。内部(至少)3个相当长的班正在共同努力,以获得满意的结果:LinearSystemConstraintWidget,和ConstraintWidgetContainer。为了完全理解性能行为,我必须深入研究这些类的深度(为此,我更喜欢在Google发布其来源时使用注释的类)。但是,只要粗略地看一下反编译的代码,看起来这些类就必须做很多事情。

一些烦恼

不过,目前并非所有人都能正常工作。现在,这些事情最让我困扰:

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

编辑器以意外方式更新或更改内容

这篇文章支持ConstraintLayout。

就个人而言,当我要对齐3个以上的视图时,我仅使用ConstraintLayout。它很容易使用,但同时令人讨厌。

tl:dr 在此处输入图片说明

  • 这一切都取决于您将其与之进行比较以及您所测量的内容。如果将其与LinearLayout进行比较,它的价格仍然昂贵得多。如果要比较它的内存使用情况,它比RelativeLayout昂贵。我也不会对随机博客中的任何内容都抱有太大的信心。特别是该博客发布了所有的草书,将其与实施不良的设计进行了比较。 (2认同)