使用大量嵌套的RelativeLayouts时出现性能问题。
例如,如果我们将一些RelativeLayout作为UI根,并且每个容器(按钮,标签,textview,imageview)都是基于RelativeLayout + Android的组件(例如aButton = RelativeLayout + ImageView + TextView),那么在复杂的我们得到4个按钮,3个图像和6个标签的视图~15个嵌套的RelativeLayouts。
RelativeLayout有一个非常复杂的onMeasure方法,它计算每个子节点的大小以确定布局的大小。计算15-20嵌套RelativeLayouts的复杂视图的大小成本约为5秒,这太过分了。 onMeasure是所有通话中最昂贵的,即使绘图完成得比测量快得多。
&LT = UPD =>
为了防止出现使用原生android视图构建复杂内容的建议:
需要能够将所有内容添加到所有内容中。这就是为什么每个容器不仅仅是View,而是ViewGroup。而Relativebayout的功能,如重力和对齐也可以帮助很多,这就是为什么使用了很多的RelativeLayouts。
< = / UPD =>
有没有人遇到这些性能问题? 是否应该将RelativeLayout替换为其他布局解决问题? 或者删除所有这些嵌套布局是解决问题的唯一方法? 有没有人知道在没有出现性能问题的情况下可以嵌套多少布局?
答案 0 :(得分:2)
这绝对取决于您的测试设备。但是你应该检查hierarchyviewer
(在tools目录中)是否有不必要的视图嵌套,以便删除它们。
此外,您的aButton听起来像股票ImageButton
。因此,您至少可以用标准解决方案替换它。
如果您发布了一些代码,可能更容易判断是否有更多项目可以被库存解决方案替换。
答案 1 :(得分:0)
经过一些测试得出结论,拥有更多12个嵌套布局会对性能产生很大影响 平均10-11个嵌套布局应该可以正常工作 例如12个嵌套布局,每个显示器上有12个子节点,设备上有6秒钟,模拟器上有9个。
答案 2 :(得分:0)
据我所知,相对布局的重点在于你不必将它们嵌套到第n度。为什么不使用一些RelativeLayout而不是每个组件1个?