Android布局优化技巧include、merge、stubView;LinearLayout和RelativeLayout的性能比较
来源:互联网 发布:虎扑认证的淘宝店排名 编辑:程序博客网 时间:2024/05/22 06:53
目录:
一、Android布局优化技巧include、merge、stubView1.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里面嵌套一个垂直的LinearLayout2.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
- Android布局优化技巧include、merge、stubView;LinearLayout和RelativeLayout的性能比较
- Android 性能优化(六) RelativeLayout和LinearLayout性能比较
- RelativeLayout和LinearLayout性能比较 相对布局和线性布局的性能比较
- RelativeLayout和LinearLayout性能比较 相对布局和线性布局的性能比较
- Android布局优化技巧--<include>/<merge>/<viewStub>
- RelativeLayout和LinearLayout性能比较
- android的常用布局LinearLayout和RelativeLayout
- 线性布局LinearLayout和相对布局RelativeLayout 之间的比较
- android布局 LinearLayout和RelativeLayout
- 如何优化你的布局层级结构之RelativeLayout和LinearLayout及FrameLayout性能分析
- 如何优化你的布局层级结构之RelativeLayout和LinearLayout及FrameLayout性能分析
- 如何优化你的布局层级结构之RelativeLayout和LinearLayout及FrameLayout性能分析
- 如何优化你的布局层级结构之RelativeLayout和LinearLayout及FrameLayout性能分析
- 如何优化你的布局层级结构之RelativeLayout和LinearLayout及FrameLayout性能分析
- LinearLayout和RelativeLayout的比较
- Android布局的优化-include、merge、ViewStub
- Android学习 - LinearLayout布局和RelativeLayout布局
- Android、布局优化、include、merge、
- Redis笔记六之管道
- Java攻城狮笔记2——JDK命令行工具
- Android 平滑图片加载和缓存库 Glide 使用详解
- 【剑指offer】二叉搜索树的后序遍历序列
- 欢迎使用CSDN-markdown编辑器
- Android布局优化技巧include、merge、stubView;LinearLayout和RelativeLayout的性能比较
- 理解A*寻路算法具体过程
- 【Linux系统编程】进程的控制:结束进程、等待进程结束
- 将Keras作为tensorflow的精简接口
- c++ std::string转换为数字和bool行
- C++ - PAT - L1-006. 连续因子
- 我还没有名字
- android属性之源码角度分析onClick属性无效
- angularjs $broadcast 和 $on 的使用及其注意事项