性能优化之布局优化

Android 布局优化



1.布局复用

在写页面的时候如果出现了同一个页面效果很多页面都要使用到的情况就需要考虑布局复用的方式了。Android考虑到布局重用提供了这两个标签。

该标签允许在一个布局中引入另外一个布局,比如很对页面里经常会有一个标题栏的布局 用来显示页面标题或者菜单按钮一类的,像这这样复用次数较多的就可以将这部分的布局代码提取出来写入到一个单独的布局文件中,在要显示的页面通过include标签的方式来将这部分页面加载进来。

在需要显示的页面布局文件中添加include标签,通过layout属性去设置include的布局文件。

该标签是作为的一种辅助扩展来使用的机型主要作用是防止引用布局文件时产生多余的布局嵌套。解析和展示一个布局是需要消耗时间的,如果布局嵌套的层级越深那么去显示这个布局所需要的时间就会越久(顺带提一下 相同的页面效果用LinearLayout与用RelativeLayout实现后者会跟合理一点 应为视图树的层级会少与LinearLayout 这样久相当于减少了显示一个布局所需要的计算时间)

我们在使用include标签时去会去定义一个通用的布局文件,在写这个布局文件的时候他的跟节点通常会是一个LinearLayout或者RelativeLayout然后才是我们需要的布局内容。这样我们在将这个布局文件include到另一个布局里的时候就可能导致这个布局文件在include进来的那个地方产生多余的布局嵌套,这时merge就能起到作用了  在可能会产生这个问题的通用布局文件里将跟节点改为标签然后在include到其他布局中去就不会存在这个问题了。(可通过View Hierarchy工具来查看布局嵌套)



2.需要时才加载布局

有时候我们在页面上很多布局是默认隐藏起来的可能在触发某个条件时才会去显示出来。通常的实现方式是给不需要显示的布局设置Invisible或者gone属性。但是从性能角度出发这并不是最合理的实现方式,因为即使在页面上被隐藏起来了在去加载解析这个布局文件的时候他们还是拥有自己的宽高等属性,加载布局还是会去一一解析这些控件。

考虑到这种情况,Android提供了一种非常轻量级的控件 ViewStub。该控件也是View的一种,但是它没有大小没有绘制功能也不参与布局,放置在布局当中基本可以认为是不会影响性能的。

使用方式:

将默认隐藏起来的布局写到一个单独的布局文件中,在原来的布局文件中放置一个ViewStub控件然后通过它的layout属性将默认隐藏的布局引用进来 这样布局文件的编写就完成了。

第二步我们需要在activity中获得到ViewStub的对象实例然后调用ViewStub的inflate()方法去加载layout属性里添加的布局 该方法返回返回一个view对象即隐藏的那个布局的view对象 要获取隐藏的视图中控件的实例可通过这个view去findViewById()。

也可以通过ViewStub.setVisibility(View.VISIBLE)来显示隐藏布局。

好啦,今天的博客到这里就完了,第一次写技术博客,感觉表达得不是很好。博客内容参考了郭霖大神的csdn博客,希望通过这种方式来加深对知识点的印象,周末愉快。

你可能感兴趣的:(性能优化之布局优化)