为什么嵌套权重对性能不利? 备择scheme?

我已经写了几个布局文件,我使用layout_weight属性来创build不同视图之间的比例。

在某些时候,我开始得到有关嵌套权重的皮棉警告。

所以,我想知道为什么嵌套的权重对性能不利,如果有一种更有效的方法来创build可以用于不同屏幕尺寸的视图尺寸之间的恒定比例,并且不需要指定很多尺寸dpi值通过几个布局文件(针对不同的屏幕尺寸,我的意思是)。

谢谢!

嵌套的权重对性能不利,因为:

布局权重需要一个小部件来测量两次。 当具有非零权重的LinearLayout嵌套在具有非零权重的另一个LinearLayout中时,测量次数呈指数增长。

使用RelativeLayout总是更好,并根据其他视图的位置调整视图而不使用特定的dpi值。

更新:好消息android百分比支持库解决了我们的性能问题和凌乱的LinearLayout嵌套

 compile 'com.android.support:percent:23.0.0' 

在这里演示

Github这里

考虑这个简单的布局来演示相同的。

百分比支持libray演示

 <android.support.percent.PercentRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/fifty_huntv" android:layout_width="0dp" android:layout_height="0dp" android:background="#ff7acfff" android:text="20% - 50%" android:textColor="@android:color/white" app:layout_heightPercent="20%" app:layout_widthPercent="50%" /> <TextView android:layout_width="0dp" android:layout_height="0dp" android:layout_toRightOf="@id/fifty_huntv" android:background="#ffff5566" android:text="80%-50%" app:layout_heightPercent="80%" app:layout_widthPercent="50%" /> </android.support.percent.PercentRelativeLayout> 

避免性能降级与重量嵌套LinearLayout 。真棒!!!

我认为(而且我可能会为此而惹火),但是我认为我的手机有一个四核处理器,可以与大多数人民(如果不是完全摧毁)家庭PC相媲美。

我也认为这种硬件能力是手机的未来。

所以我得出一个结论,只要你没有被嵌套的困扰(在MHO中,布局应该不会超过4层,如果是你可能做错了),你的电话可能会less一些关于重量。

有很多事情你可以做,将会对性能产生更深远的影响,然后担心你的处理器做了一些额外的math。

(请注意,我有点幽默,所以不要太重视这个post,除此之外,还有其他一些你应该优化的东西,而且担心2-3级的重量并不能帮助你你的健康)

嵌套的重量不好的主要原因是当一个布局有一个重量的孩子,它必须被测量两次(我认为这是在皮肤警告中提到)。 这意味着还包含加权布局的加权布局必须测量四次,并且您添加的每个“图层”权重将增加2的幂次。

在ICS(API等级14)中添加了GridLayout ,这为以前需要权重的许多布局提供了简单和“平坦”的解决scheme。 如果您正在开发早期版本的Android,那么删除权重的时间将会稍微长一点,但是使用RelativeLayout并尽可能平整您的布局,通常会删除大量的嵌套权重。

我认为,唯一的select是做一个函数,将被称为onResume,并将设置所有大小和位置。 无论如何,按重量计算,你只能设置大小,但不能填充(所以布局变得更复杂),没有textSize(不可能补偿这个),更不用说像行数。