Android性能优化 —— 布局优化篇

每日一句

人呐,眼光放得长远一些,看到的东西也会多一些,生活也就会过得更有意义一点。


Android性能优化 —— 布局优化篇_第1张图片


写在开头

Android设备作为一种移动设备,在内存和CPU的性能让都受到了一定的限制,无法做到像PC端那样具有超大内存和高性能的CPU。如果不加节制的使用内存和CPU资源,通常会导致如下情况:

  • 过多的使用内存会导致内存溢出,即OOM。
  • 过多的使用CPU资源,一般是指做大量的耗时任务,会导致手机变得卡顿,甚至出现程序无法响应的情况,即ANR。

    由此可见,Android开发中性能优化,对每一个开发者至关重要。


布局优化篇

反正,布局优化就是尽量减少布局文件的层级呗,层级少了Android绘制时的工作量就少了,那速度自然就快了,就是这么个理。


Android性能优化 —— 布局优化篇_第2张图片

如何优化呢?

  • 在实际开发中,布局文件不要使用多余的控件和层级。
  • 布局中既可以使用LinearLayout 也可以使用RelativeLayout,那么就尽量使用LinearLayout 。因为RelativeLayout功能比较复杂,绘制的时候占用更多的CPU时间。
  • 布局中尽量使用性能比较的ViewGroup,如:LinearLayout 、FrameLayout。
  • 如果单独的一个LinearLayout 或者FrameLayout无法实现的时候,就使用RelativeLayout,尽量不要嵌套,这样反而增加了层级。

另一种手段

采用标签、标签和ViewSub。标签主要用于布局的重用,标签的话一般和配合使用,可以达到减少布局层级的作用。ViewStub则提供了按需加载的功能,当需要时才会将ViewSub中的布局加载到内存,这就提高了程序的初始化效率。


include标签

如下所示,我引用一个tool_bar布局文件加载到当前布局中。

Android性能优化 —— 布局优化篇_第3张图片

这样一来我们就不需要把tool_bar中布局内容在重复写一遍了。

merge标签

标签的话一般和配合使用,可以达到减少布局层级的作用。比如说上面引入的tool_bar布局文件也是LinearLayout垂直布局的话,那么tool_bar布局中再使用LinearLayout就变得没有意思了,使用的的话反而会减慢UI绘制。

这时候我们就可以将,如下:

Android性能优化 —— 布局优化篇_第4张图片

替换成,如下:

Android性能优化 —— 布局优化篇_第5张图片

如果想了解更多,大家可以自行百度。

ViewStub

ViewStub 最大的优点是当你需要时才会加载,使用他并不会影响UI初始化时的性能。各种不常用的布局像进度条、显示错误消息等可以使用标签,以减少内存使用量,加快渲染速度。是一个不可见的,宽/高都是0的View。废话不多说直接看代码,如下:

新建懒加载布局文件test.xml

Android性能优化 —— 布局优化篇_第6张图片

在activity_main布局中使用ViewStub,如下:

Android性能优化 —— 布局优化篇_第7张图片

简单介绍一下, android:layout=”@layout/test” 就是引用懒加载布局。

程序中使用,如下

Android性能优化 —— 布局优化篇_第8张图片

两种方式:
mViewStub.setVisibility(View.VISIBLE);
mViewStub.inflate();//推荐这个方法

目前还不支持标签,我测试的时候还发现, 布局中包含标签,也没有效果,原因未知,欢迎留言。

参考资料:《Android开发艺术探索》

你可能感兴趣的:(Android)