android开发 如何优化布局

来源:互联网 发布:36氪 知乎 编辑:程序博客网 时间:2024/05/22 12:41

如何优化布局?

1. 在view可见时才加载布局

场景:有些布局会隐藏有些布局会展示
把View的初始可见View.GONE但是在Inflate布局的时候View仍然会被Inflate,也就是说仍然会创建对象,会被实例化,会被设置属性。也就是说,会耗费内存等资源。

替换方式:
推荐的做法是使用android.view.ViewStub,ViewStub是一个轻量级的View,使用非常简单:
mViewStub = (ViewStub) this.findViewById(R.id.viewstub);
mViewStub.inflate();

它是一个占用资源非常小的控件,相当于一个“占位控件”。使用时可以为ViewStub指定一个布局,在Inflate布局的时候,只有ViewStub会被初始化,然后当ViewStub被设置为可见的时或调用了ViewStub.inflate()的时候,ViewStub所指向的布局就会被inflate实例化,此布局文件直接将当前ViewStub替换掉,然后ViewStub的布局属性都会传给它所指向的布局。这样,就可以使用ViewStub在运行时动态显示布局,节约内存资源。

目的:正确把握住ViewStub的应用场景非常重要,因为使用ViewStub可以优化布局,一般应用在当前布局或控件在用户使用较少情况下,这样可以提高性能,节约内存,加快界面渲染

对于ViewSub如何使用,可查看此文

2. 布局重用

可以通过这个标签直接加载外部的xml到当前结构中,是复用UI资源的常用标签

3. 减少视图层级

标签在UI的结构优化中起着非常重要的作用,它可以删减多余的层级,优化UI。多用于替换FrameLayout(因为所有的Activity视图的根结点都是FrameLayout,如果当前的布局根结点是Framelayout,那么可以用merge替代,减少多余的层级)或者当一个布局包含另一个时,标签消除视图层次结构中多余的视图组。例如你的主布局文件是垂直布局,又include引入了一个垂直布局,这是如果include布局使用的LinearLayout就没意义了,使用的话反而减慢你的UI渲染。这时可以使用标签进行优化。

<merge xmlns:android="http://schemas.android.com/apk/res/android"><Button    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="" /><TextView    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="" /></merge>  
0 0
原创粉丝点击