常用的优化方法:布局优化,绘制优化,内存泄露优化,响应速度优化,ListView优化,Bitmap优化,线程优化。
尽量减少布局文件的层级,可以使用
<include
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_width="match_parent"
layout="@layout/title"
/>
ViewGroup继承了View,宽和高都是0,不参与布局和绘制过程。可以实现按需加载:
<ViewStub
android:id="@+id/stub_import"
android:inflatedId="@+id/panel_import"
android:layout="@layout/layout_network_error"
android:layout_width="match_parent"
android:layout_height="wrap_parent"
android:layout_gravity="bottom"
/>
stub_import是ViewStub的id,panel_import是layout_network_error这个布局的根元素的id,实现按需加载
findViewById(R.id.stub_import).setVisibility(View.VISIBLE);
//或者
View importPanel = (ViewStub)findViewById(R.id.stub_import).inflate();
另外ViewStub不支持
降低View的onDraw的复杂度,尽量不要在里面创建对象。
Activity如果5秒钟之内无法响应速度屏幕触摸事件或者键盘输入事件就会出现ANR,BroadcastReceiver如果10秒钟之内还未执行完操作也会出现ANR。
可以在/data/anr目录下创建一个文件traces.txt,当一个进程发生了ANR就会被记录在这个文件里面。
ListView:采用ViewHolder避免在getView执行耗时操作,根据滑动状态来控制任务的执行频率,,开启硬件加速。
Bitmap:主要是通过BitmapFactory.Options来对图片进行采样,根据需要图片的大小对BitmapFactory.Options的inSample参数进行设置。
采用线程池,避免创建大量的Thread。
使用MAT工具分析内存泄露。