Android布局优化技巧include、merge、stubView;LinearLayout和RelativeLayout的性能比较

来源:互联网 发布:虎扑认证的淘宝店排名 编辑:程序博客网 时间:2024/05/22 06:53

目录:

一、Android布局优化技巧include、merge、stubView
1.Include
2.Merge:
3.ViewStub
二、LinearLayout和RelativeLayout的性能比较
1.典型的实现方案有两种
2.两个方案LinearLayout和RelativeLayout的性能比较:
3.结论



一、Android布局优化技巧include、merge、stubView



Include:

单纯的减少布局代码重用


Merge:

Merge的两种用法:

1.如果父View是FrameLayout,直接改成merge可以减少一个FrameLayout层级。不过这种情况相对是少见的。
2.更多的是LinearLayout和LinearLayout,由于merge必须作为根布局的,所以需要配合include来使用,当被嵌入父级结构中后可以很好的将它所包含的子集融合到父级结构中,而不会出现冗余的节点。在复用时候很有效,例如两个TextView要被不断重用,那么这两个TextView的xml就可以考虑用merge而不是LinearLayout,不然当一个LinearLayout来include这两个TextView的时候会出现不必要的层级。

Merge注意点:

<merge />只可以作为xml layout的根节点。
如果inflate的是一个merge,那么必须设置父ViewGroup,同时需要设置attachToRoot为True。如下:View android.view.LayoutInflater.inflate(int resource, ViewGroup root, boolean attachToRoot)


ViewStub:

ViewStub是既不显示也不占用位置的,而不是加载后再设置为GONE。所以如果一个View被用到的机会很少,那么应该设置为ViewStub,因为如果设置为GONE那么依然会在加载的时候被调用而浪费资源。
动态加载ViewStub所包含的布局文件有两种方式,方式一使用使用inflate()方法,方式二就是使用setVisibility(View.VISIBLE)。
Java代码:
viewStub = (ViewStub) findViewById(R.id.stub_image);viewStub.inflate();//方式一viewStub.setVisibility(View.VISIBLE);//方式二






二、LinearLayout和RelativeLayout的性能比较

如果要实现一个典型的listView的子View,如图:


 
它的结构:
 


典型的实现方案有两种:

1.水平的LinearLayout里面嵌套一个垂直的LinearLayout
2.RelativeLayout 


两个方案LinearLayout和RelativeLayout的性能比较:

RelativeLayout分别对所有子View进行两次measure,横向纵向分别进行一次。
LinearLayout默认是测量一次,但是如果设置了Weight属性,那么同样需要测量2次。
(以上可以通过分析这两个View的源码分析得出)


结论:

1.不嵌套时优先LinearLayout,一旦LinearLayout需要嵌套(如上例),那么优先使用RelativeLayout会节省很多资源,一定要避免嵌套。
2.由于布局的嵌套非常常见,所以平常开发中布局推荐使用RelativeLayout,它也可以有效减少布局层级嵌套。


















参考文献:
http://android-developers.blogspot.sg/2009/03/android-layout-tricks-3-optimize-with.html
http://www.tuicool.com/articles/uQ3MBnj
http://android-developers.blogspot.sg/2009/02/android-layout-tricks-1.html
http://www.sunnyang.com/418.html?utm_source=tuicool&utm_medium=referral

1 0
原创粉丝点击