为什么嵌套权重对性能不利? 备择scheme?
我已经写了几个布局文件,我使用layout_weight
属性来创build不同视图之间的比例。
在某些时候,我开始得到有关嵌套权重的皮棉警告。
所以,我想知道为什么嵌套的权重对性能不利,如果有一种更有效的方法来创build可以用于不同屏幕尺寸的视图尺寸之间的恒定比例,并且不需要指定很多尺寸dpi值通过几个布局文件(针对不同的屏幕尺寸,我的意思是)。
谢谢!
嵌套的权重对性能不利,因为:
布局权重需要一个小部件来测量两次。 当具有非零权重的LinearLayout嵌套在具有非零权重的另一个LinearLayout中时,测量次数呈指数增长。
使用RelativeLayout总是更好,并根据其他视图的位置调整视图而不使用特定的dpi值。
更新:好消息android百分比支持库解决了我们的性能问题和凌乱的LinearLayout
嵌套
compile 'com.android.support:percent:23.0.0'
在这里演示
Github这里
考虑这个简单的布局来演示相同的。
<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(不可能补偿这个),更不用说像行数。