Android性能优化总结

前言

性能优化中一个很重要的问题是内存泄漏,内存泄漏不会导致程序功能异常,但是它会导致Android程序的内存占用过大,这将提高内存溢出的发生机率。

Android性能优化方法

1布局优化

布局优化思想很简单,就是尽量布局文件的层级。如何进行布局优化,首先可以删除布局中无用的控件和层级,其次有选择的使用性能较低的ViewGroup,比如Relativelayout,因为RelativeLayout的功能比较复杂,它的布局需要花费更多的时间。
布局优化的另外一种手段是使用< include>标签、< merge >标签和ViewStub。< include>标签主要用于布局重用,< merge >标签一般和< include>配合使用,它可以降低减小布局的层级,而ViewStub则提供了按需加载的功能,当需要时才会将Viewstub中的布局加载打牌内存。
< include>标签
将指定布局文件加载到当前的布局文件中,< include>标签只支持android:layout_开头的属性,比如android:layout_width、android:layout_height,其他属性是不支持的,比如android:backgroud。当然,android:id这个属性是特例,如果< include>标签指定了id这个属性,同时被包含的布局文件的根元素也指定了id,那么以< include>标签指定的id为准。
< merge >标签
< merge >标签一般与< include>一起使用从而减小布局的层级,如当前布局是一个竖直方向的LinearLayout,这个时候如果被包含的布局文件也采用竖直方向的LinearLayout,那么显然被包含的布局文件的LinearLayout是多余的,通过< merge >标签就可以去掉多余的那一层LinearLayout。
ViewStub
ViewStub继承了View,它非常的轻量级且宽高都是0,因为它本身不参与任何的布局和绘制过程。ViewStub的意义在于按需加载所需的布局文件,在很多布局文件在正常情况下是不会显示的,比如网络异常时的画面,这个时候就没有必要在整个界面初始化的时候将其加载进来。
在需要加载ViewStub的时候,可以按照以下方式进行:

View import=((ViewStub)findViewById(R.id.stub).inflate());

这样,ViewStub就会被内部的布局给替换掉,这个时候ViewStub就不是整个布局的一部分了。

2、绘制优化

View的onDraw方法避免大量的操作:
1、onDraw方法不要创建新的局部对象,这是因为onDraw方法会被频繁调用,这样会在一瞬间产生大量的临时对象,占用过多内存。
2、onDraw方法不要做耗时任务。

3、ListView优化

1、采用ViewHolder并避免在getView中执行耗时操作
2、根据滑动状态来控制人物的执行频率,如当列表快速滑动时显然是不太适合开启大量的异步任务的。

4、响应速度优化

响应速度优化的核心思想是避免在主线程中做耗时任务。响应速度过慢更多的体现在Activity的启动速度上面,Activity如果5s内无法响应屏幕的触摸时间就会出现ANR,BroadcastReceiver如果10s内未执行完操作也会ANR。。当一个进程发生ANR后,系统会在/data/anr目录下创建一个traces.txt文件,通过这个文件可以定位ANR原因。

你可能感兴趣的:(安卓,android,性能优化,内存泄露,内存溢出)