-1

使用大量嵌套的 RelativeLayouts 时会出现性能问题。

例如,如果我们有一些 RelativeLayout 作为 UI 根,并且每个容器(按钮、标签、textview、imageview)都是基于 RelativeLayout + Android 的组件(例如 aButton = RelativeLayout + ImageView + TextView),那么在 4 的复杂视图中按钮、3 个图像和 6 个标签,我们得到了大约 15 个嵌套的 RelativeLayouts。

RelativeLayout 有一个非常复杂的 onMeasure 方法,它计算每个孩子的大小以确定布局的大小。计算 15-20 个嵌套 RelativeLayouts 的复杂视图的大小大约需要 5 秒,这太多了。onMeasure 是所有调用中最昂贵的,即使绘图完成的速度也比测量快得多。<=UPD=>
为了防止出现使用原生 android 视图构建复杂事物的建议:
需要能够将所有内容添加到所有内容中。这就是为什么每个容器都必须不仅仅是 View,而是 ViewGroup。并且像重力和对齐这样的 RelativeLayout 功能也可以提供很多帮助,这就是为什么要使用大量的 RelativeLayouts。 <=/UPD=>

有人遇到过这些性能问题吗?
应该用其他布局替换RelativeLayout 解决问题吗?
或者删除所有这些嵌套布局是解决问题的唯一方法?
有谁知道可以嵌套多少布局而不会出现一些性能问题?

4

3 回答 3

2

这绝对取决于您的测试设备。但是您应该检查hierarchyviewer(在工具目录中)是否有不必要的视图嵌套,以便删除它们。

您的 aButton 听起来也像股票ImageButton。因此,您至少可以用标准解决方案替换它。

如果您发布了一些代码,则可能更容易判断是否有更多项目可以被库存解决方案替换。

于 2010-12-09T07:38:18.977 回答
0

经过几次测试后得出的结论是,拥有超过 12 个嵌套布局会对性能产生很大影响。
平均而言,10-11 个嵌套布局应该可以正常工作。
例如 12 个嵌套布局,每个显示 12 个子项在设备上的 6 秒内,在模拟器上的 9 个。

于 2010-12-09T11:17:16.740 回答
0

据我了解,relativelayout 的全部意义在于您不必将它们嵌套到第 n 级。为什么不只使用几个 RelativeLayout 而不是每个组件 1 个?

于 2011-01-03T13:37:19.630 回答