android优化

android手机的内存和CPU的性能都是有限的,无限制的使用手机的内存,会导致内存溢出。同样过多的占用CPU的资源,会使得手机变得十分卡顿。
本篇文章介绍几种android性能优化的办法。

1,布局优化
主要需要优化布局的层级,布局的层级少了,android系统的绘制过程就会减少,从而可以提高android性能。

首先要删除布局中无用的布局和层级。不要包裹一些没必要的父布局。
LinearLayout和FrameLayout相对于ReleativeLayout来说更简便,能够用简便的实现的,就不要用复杂的。比如需要用到嵌套布局的情况,那就是用RelativeLayout。
RelativeLayout复杂,会导致布局的过程会花更多的CPU时间。

1.1 <include>标签和<merge>标签的使用:
主要用于布局的重用,重复的布局代码只需要写一次,需要该布局的地方使用include标签。
可以减少布局的层级。比如下面的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent">

    <Button  style="@style/Botton_Common" android:id="@+id/btn_next" android:text="下一个"/>

</LinearLayout>

它的层级关系如下图:
android优化_第1张图片
使用merge标签后

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent">

    <Button  style="@style/Botton_Common" android:id="@+id/btn_next" android:text="下一个"/>

</merge>

android优化_第2张图片
以上的例子证明了使用merge标签可以减少布局的层级关系。

什么时候要可以使用merge?
①子View中没有和父View相关的属性定义。
②多层重复的布局,比如LinearLayout里又嵌套LinarLayout,这个时候就可以使用merge。

merge作为布局的根标签时,inflate时,必须指定一个父ViewGroup,且必须设定attchToRoot的值为true。

1.2 ViewStub的使用
有的布局并不是一定会展示出来,比如无网络的布局,数据为空的布局等。
我们虽然可以手动的设置了它的Visibility为visible和gone,但是现在它在整个界面初始化的时候就已经加载进来了。而ViewStub可以在需要它的时候,在inflate,显示或隐藏。在不需要的时候,它不会参与任何的布局和绘制。

ViewStub的布局,它的layout会关联一个layout布局文件。

<ViewStub
        android:id="@+id/viewstub"
        android:layout_marginRight="@dimen/padding"
        android:layout_marginLeft="@dimen/padding"
        android:layout="@layout/image"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
//如果要展示ViewStub的布局
ViewStub stub=(ViewStub)findViewById(R.id.viewstub);
stub.inflate();
或
stub.setVisibility(View.Visible);

注意的是ViewStub当被inflate或setVisibility后,就会显示它内部的布局,同时会被内部的布局替换掉。接下来不可以继续对ViewStub进行其他的操作。

你可能感兴趣的:(android)