android布局之二:布局复用
2016-03-01 16:30
253 查看
对于上一篇文章提到的布局管理器,使用起来容易,但是要想达到高效的目的还是没那么容易的,尤其是仅仅是利用它的最基本的特征往往创建不了最优的View,对于inflate布局文件本身是有性能消耗的,尤其是每增加一个嵌套布局或视图都会对应用程序产生很大的影响,所以我们就要尽量的做到对已存在的布局在更新时最小的变化
一般原则有:
避免不必要的嵌套:不要把一个布局放置在其他布局里,除非是必要的。
避免使用太多视图:在一个布局中每增加一个新的视图,都会在inflate操作时耗时和消耗资源。任何时候都不要在一个布局中包含超过80个视图,否则,消耗在inflate操作上的时间会很大。
避免深度嵌套:布局可以任意嵌套,这极易于创建复杂和深度嵌套的布局层次。如果没有硬性限制,将嵌套限制在10层以下是好的实践。
(其实总结起来就两点:深度和广度上都尽量的简单)
与UI优化相关的Android工具有:layoutopt、hierarchyviewer.bat
layoutopt:后面跟要优化的资源文件,系统会列出可优化的方式
hierarchyviewer:可以树形结构显示当前布局,我们可以通过这种方式学习别人优秀的布局方式,同时可以更加全局的把握自己的布局方式、特点,从而进行优化。
一些可用于资源复用的标签:ViewStub、merge、include
ViewStub: 此标签可以使UI在特殊情况下,直观效果类似于设置View的不可见性,但是其更大的(R)意义在于被这个标签所包裹的Views在默认状态下不会占用任何内存空间。ViewStub通过include从外部导入Views元素。
用法:通过android:layout来指定所包含的内容。默认情况下,ViewStub所包含的标签都属于visibility=gone。ViewStub通过方法inflate()来召唤系统加载其内部的Views。 如:
<ViewStub android:id="@+id/stub" android:inflatedId="@+id/subTree" android:layout="@layout/mySubTree" android:layout_width="120dip" android:layout_height="40dip" />
merge:标签用于减少View树的层次来优化Android的布局
可参考/article/4907542.html
include:可以通过这个标签直接加载外部的xml到当前结构中,是复用UI资源的常用标签。如:
<include android:id="@+id/cell1" layout="@layout/ar01" />
相关文章推荐
- Android 使用Parcelable序列化对象
- Android开发笔记(七十三)代码混淆与反破解
- RadioButton设置默认选中后无法取消,可选中多个的问题
- Android studio 插件安装
- Android-程序(***)无响应,要将它关闭吗
- android学习日记02-安装androidstudio完成helloword
- Android Activity启动模式(launchMode)
- Android Studio中Junit单元测试使用JSON对象异常的问题
- 第12章、布局Layouts之LinearLayout线性布局(从零开始学Android)
- Android Studio删除Project
- Android 打包apk(Ecplise)
- 5个Android常见内存泄露及处理方法
- Android studio 相关
- android Toast大全(五种情形)建立属于你自己的Toast
- Android基础类之BaseAdapter
- Android 内部存储相关的函数(getCacheDir,getDir, getFileStreamPath,getFilesDir,openFileInput, ...)
- Android adjustpan not working after the first time
- android – 多屏幕适配相关
- 2016这些Android技术会很火
- Android Shape 笔记