一 . 代码优化
(1)循环优化
List mlist = userManager.getUserList();
for(int i = 0;i<mlist.size();i++){
}
以上的代码会一直去执行mlist.size()方法,可优化为
for(int i=0,p=mlist.size();i<p;i++){
}
(2)尽量在使用时再实例化对象。
NewObject object = new NewObject();
if(i>0){
objectList.add(object);
}
优化为
NewObject object = null;
if(i>0){
object = new NewObject();
objectList.add(object);
}
(3)使用StringBuffer和StringBuilder进行字符串连接
String title = new String("你好,");
title += user.getName();
title += "。现在是星期二";
优化为
StringBuffer title = new StringBuffer("你好,");
title.append(user.getName());
title.append("。现在是星期二");
//转换为字符串:title.toString();
StringBuffer 是线程安全的,速度比StringBuilder要慢。
StringBuilder是线程不安全的,速度比StringBuffer要快。
在Java程序中,StringBuffer的构造器会创建一个默认大小(通常为16)的字符数组。在使用过程中,如果超出这个大小,就会重新分配内存,创建一个更大的数组,并将原先的数组复制过去,再丢弃旧的数组。
当可预知StringBuffer存放字符串的大小时,可以在创建StringBuffer实例时指定大小。
StringBuffer title = new StringBuffer(30); //预知大小为30个字节。
(4)避免使用枚举。
(5)简单的乘除法用移位来实现。
二 . 控件等优化
(1)ListView优化
使用异步加载图片
(2)使用merge/viewstub/include来优化布局
(3)条件允许下,尽量使用RelativeLayout来代替LinearLayout,主要用来减少视图树的层次。
(4)在android应用中,Drawable和Bitmap都能实现图像加载机制,但建议使用BitmapDrawable来保存图片对象,这样占用更小的内存空间。而使用Bitmap对象,则会占用很大的内存空间。
(5)针对移动设备,最好能使用JSON之类的轻量级数据格式。
(6)android图片的内存优化
InputStream is = this.getResources().openRawResource(R.drawable.pic);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = false;
options.inSampleSzie = 10; // width,height设为原来的十分之一
Bitmap bitmap = BitmapFactory.decodeStream(is,null,options);
//使用bitmap完后回收图片资源
if(!bitmap.isRecycle()){
bitmap.recycle();//回收图片所占的内存
system.gc();//提醒系统及时回收
}