首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套线性布局的权重,为什么被认为是坏的?

嵌套线性布局的权重,为什么被认为是坏的?
EN

Stack Overflow用户
提问于 2015-05-13 18:35:11
回答 2查看 225关注 0票数 0

所以,从2011年2月开始,我就开始在Android上开发。有一件事我一直很清楚,嵌套线性布局的权重和权重之和“不利于性能”,编译器(至少eclipse做了)是一个警告,当你这样做的时候。

然而,我的经验是,这样做对用户体验和切换屏幕的速度没有明显的影响。作为一项实验,我创建了下面的屏幕,它故意除了使用权值和嵌套的线性布局之外,别无它物。我用对比的颜色来显示所有使用的线性布局。好处是它在大屏幕和小屏幕上看起来都是一样的。

我在Galaxy S4、Galaxy 10.0、Galaxy 37“和非常小的低功耗Galaxy上试过。我在姜饼、奶油三明治、Kitkat和Lollupop上试过,没有看到屏幕之间有任何明显的速度差别--一个简单的屏幕,在相对布局上有4个按钮。

是什么让这个主意如此糟糕?在引擎盖下面发生了什么,使得这不是一个理想的解决方案?所有这一切会改变我在混合中添加绘图或图像的时间吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-13 18:45:30

是什么让这个主意如此糟糕?

这主意不错。它也不是免费的。

特别是,你的情况相当简单,尽管你的抗议相反。虽然布局相当复杂,但只呈现一次。因此,虽然您可以在呈现时删除几个帧,但是这个代价只支付了一次(或者,更准确地说,每个使用此布局的活动/片段只支付一次)。

每个布局的开销变成了一个更大的问题,当它被放大时,其中的几个会被动画化,比如ListView/RecyclerView中的行,或者ViewPager中的页面。现在,我们正在经历大量的渲染通过,因为用户滑动并使我们重新绘制我们的内容。列表中的每一行都可能要比布局简单得多,但我们也将尝试每秒绘制很多次。而且,虽然在您的例子中,有几个丢弃的帧可能并不明显,但是在动画期间丢弃的帧几乎就是Android中"jank“的定义。

只要您没有jank -- IOW,您不会像Choreographer在LogCat中报告的那样,或者像在gfxinfo覆盖中通过开发人员选项所看到的那样,放弃任何帧--那么您的布局就会很好,至少就我和大多数用户而言是这样。相反,如果您正在删除框架,试图找出更有效的布局,甚至可能是定制的ViewGroups而不是通用的布局,可能有助于缓解这种麻烦。

票数 3
EN

Stack Overflow用户

发布于 2015-08-14 15:42:38

这里的主要问题是如何使用Android将您的视图放在屏幕上。。每当一个位置相对于一个视图发生变化时,“布局”就会在视图层次结构中层叠而过,接触每个视图并执行一些计算(类似于改变“大小”启动“度量值”传递)。

一些布局容器,如RelativeLayout,必须强制进行第二次“布局”传递才能开始;一旦所有视图计算出了它们想要的位置,ReltativeLayout就需要根据它的布局属性重新定位所有东西。

这就导致了视图层次结构中的双重布局税;这不是免费的。

现在,如果您有一个浅层次结构,则此操作的开销是微不足道的。当您有了一个深层次结构,其中包含多个双布局容器时,这就开始遇到问题了。例如,在根处有一个RelativeLayout,其中包含设置了“带最大子度量值”的LinearLayouts。结果是,叶节点视图将被“布局”调用8次。

这对性能的影响直接关系到您的布局/度量传递在场景中的复杂程度。如果没有什么问题的话,也许在高端设备上,12x/次的布局通行证并不是什么大问题。但是,如果其中一个叶节点具有复杂的布局传递,那么您只是在浪费周期。

这里的主要主题是分析一些有问题的东西,但请记住,如果设置错误的方法,只会浪费其他地方可能使用的性能。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30222729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档