Android性能优化-布局优化(一)
1、include布局优化。
当页面较多,内容重复也比较多,比如app每个页面都有标题栏,就会存在多个页面的标题栏长的都一样,那么就可以将这些页面相同的部分抽取出一个公共的布局。用include标签来引入就可以了。由此可见采用include标签的好处就是简化代码,避免代码冗余。

2、merge标签的使用
在做页面时,经常会用到布局嵌套的情况,其中有一种情况是子布局的根视图与它的父视图是同一类型;如下图所示。但需要注意merge不是随意使用的,它也是有一定规则的:1、只能在布局的根节点使用;2、该子类布局的根节点需与其父类相同时才可以使用。具体可以查看源码,也可给我留言交流。

3、ViewStub视图的使用
ViewStub是一个不可见的和能在运行期间延迟加载目标视图的、宽高都是0的
View。当需要其布局展示时,可调用它的inflate()方法设置它可见,也可以执行它的setVisibility(View.VISIBLE)方法设置它可见。它的好处就是,设置ViewStub视图之前,它是不占用布局空间和系统资源的。它只是一个为目标视图临时占了一个位置。


4、减少视图树层级结构
每一个视图显示的时候都要经历测量、布局、绘制的过程。查看源码可知,如果我们的布局嵌套的视图层次太多,就会造成额外的测量、布局等,比较消耗系统资源,使得UI变得卡顿,影响用户体验。其实merge也是减少视图层级的一种方式。如下图,同样的视图,不同的布局,使用RelativeLayout更优一点。


5、view的视图因此与显示(gone, visible, invisible)
gone, invisible两种同样时有隐藏视图的功能。gone,不占用空间,视图会重新测量绘制;而invisible视图不会重新绘制,视图虽然因此,但仍然占用空间位置。所以根据不同情况进行选择,但建议遵循一点,能使用invisible就不使用gone。

6、这里做一下简单的总结:
1、相同层级的布局,可以Linearlayout,但尽量不要使用weight,因为使用weight会重新测量两次。
2、不同层级时,如果Linearlayout使用嵌套过多,这是建议使用RelativeLayout减少布局嵌套。
