android应用程序优化之布局优化

休言女子非英物,夜夜龙泉壁上鸣。这篇文章主要讲述android应用程序优化之布局优化相关的知识,希望能为你提供帮助。
      在我们开发APP时不仅要在代码实现上。做到对App的优化,而在我们的界面布局也有很多要优化的地方,假设布局写的非常low的话,系统载入布局的速度会十分的慢,使得用户的体验非常的不好。这篇文章主要是从我平时对布局的优化方面总结一下,我觉得常常能够用到的布局优化方面的一些技巧和手段。
  1.降低布局的嵌套。这一点也是最重要的
      搞android的都知道,android的整个UI布局文件最后也是要一层一层的解析成View对象的,假设层次太深的话,对导致递归的层次太深而极大的影响解析速度,所以,我们一定不能让布局文件的层次太深,要想做到布局文件的层次不深,通经常使用到的手段有:1)使用RelativeLayout取代LinearLayout。2)编写完布局文件时。能够使用HieracyView工具检查是否有多余的无用布局,假设有,则一定要去掉没用的布局。

    2.布局重用。
        一些能够公用的布局我们不必要每次都重写一遍,能够将其写为一个独立的布局文件,最后使用include标签将布局引用就可以。然而,严格上来讲,布局重用仅仅是降低了我们代码的编写量,并不能达到相应用的优化作用。并且,在使用include时会非常easy产生第一点中的无用父布局,例如以下图:
       

android应用程序优化之布局优化

文章图片

        怎样去除使用include代来的负作用,以下会有方案。
    3.使用merge标签去消除include标签所引入的无用布局
      使用merge时要注意,merge标签仅仅能是根布局,结合2。3两点看一个演示样例使用方法:
      首先,创建一个merge标签的根布局,代码例如以下: 

?
xml version="1.0" encoding="utf-8"?> < merge xmlns:android="http://schemas.android.com/apk/res/android"> < Button android:id="@+id/ok" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:text="OK" /> < Button android:id="@+id/cancel" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:layout_marginTop="10dp" android:text="Cancel" /> < /merge>

      接着。使用include引入布局:【android应用程序优化之布局优化】

< include layout="@layout/ok_cancel_layout"/>


    4.利用 ViewStub延迟载入一些用不到的布局,在一些场合代替android:visibility="gone"的使用方法。由于被gone掉的布局不断是会同一时候创建对象的。那为什么使用ViewStub就高效呢,拿源代码来说话,先看一下ViewStub源代码:       

@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension(0, 0); }< span style="font-family: Arial, Helvetica, sans-serif; "> < /span>

< p style="margin-top: 0px; margin-bottom: 0px; font-size: 11px; font-family: Monaco; color: rgb(119, 119, 119); "> < span style="color: rgb(0, 0, 0); ">     < /span> @Override< /p> < p style="margin-top: 0px; margin-bottom: 0px; font-size: 11px; font-family: Monaco; ">     < span style="color: #931a68"> public< /span> < span style="color: #931a68"> void< /span> draw(Canvas < span style="color: #7e504f"> canvas< /span> ) {< /p> < p style="margin-top: 0px; margin-bottom: 0px; font-size: 11px; font-family: Monaco; ">     }< /p>



        由onMeasure()方法和draw()方法能够看出。 ViewStub的初始宽高都是零,所以他開始不会占用空间,其次draw()方法也没有运行不论什么的绘制,由这两个方法就能够看出。ViewStub的确非常高效。
        在代码中要操纵ViewStub的时候,要首先使用viewstub.inflate()方法,将其所拥有的View初始化进去。否则会报空指针错误。

    5.降低不同层间的背景重绘。比如,假设某个view父布局的背景已经设置为了白色。则不须要再为此view设置背景色,通过这个简单的小技巧,能够许多的提升速度。

    6.假设整个App都使用了自己定义的Title和background,则我们能够使用自己定义的style,永久的去掉系统默觉得我们的Activity所加入的title和background,也能够提高Activity的渲染速度。






    推荐阅读