android布局之二:布局复用

来源:互联网 发布:呼吸税 知乎 编辑:程序博客网 时间:2024/06/07 02:19
对于上一篇文章提到的布局管理器,使用起来容易,但是要想达到高效的目的还是没那么容易的,尤其是仅仅是利用它的最基本的特征往往创建不了最优的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的布局
    可参考http://www.cnblogs.com/xirihanlin/archive/2010/04/23/1718353.html
  • include:可以通过这个标签直接加载外部的xml到当前结构中,是复用UI资源的常用标签。如:
 <include android:id="@+id/cell1" layout="@layout/ar01" />   
0 0
原创粉丝点击