android内存优化

参考自Android内存优化大全(中)
一、Bitmap优化

修改图片的显示大小
  • 不要用ImageView直接显示,会占用较多的资源,特别是图片较大时,会造成系统的奔溃。可以使用BitmapFactory.Options进行设置参数inSampleSize,该参数若为2,则表示显示的图片是原图的1/2。
BitmapFactory.Options bitmapFactoryOptions = new BitmapFactory.Options(); 
bitmapFactoryOptions.inSampleSize = 2;  
Bitmap bmp = BitmapFactory.decodeFile(sourceBitmap, options);  
修改图片像素

BitmapFactory.Options进行设置参数inPreferredConfig,参数的意义如下:

  • ALPHA_8:每个像素占用1byte内存
  • ARGB_4444:每个像素占用2byte内存
  • ARGB_8888:每个像素占用4byte内存(默认)
  • RGB_565:每个像素占用2byte内存

在对图片的要求不高的时候,使用RGB_565可以提高性能

public static Bitmap readBitMap(Context context, int resId) {  
    BitmapFactory.Options opt = newBitmapFactory.Options();  
    opt.inPreferredConfig = Bitmap.Config.RGB_565;  
    opt.inPurgeable = true;  
    opt.inInputShareable = true;  
    //获取资源图片   
    InputStream in = context.getResources().openRawResource(resId);  
    returnBitmapFactory.decodeStream(in, null, opt);  
}  
回收图片

在使用完图片之后,调用bitmap.recycle()方法对图片进行回收。

// 先判断是否已经回收  
if(bitmap != null && !bitmap.isRecycled()){  
    // 回收并且置为null  
    bitmap.recycle();  
    bitmap = null;  
}  
System.gc();  //提醒系统进行垃圾回收
捕获异常

在完成上述操作后,添加捕获异常处理

Bitmap bitmap = null;  
try {  
    ......
    // 实例化Bitmap  
    bitmap = BitmapFactory.decodeFile(path);  
} catch (OutOfMemoryError e) {  
    // 捕获OutOfMemoryError,避免直接崩溃  
}  
if (bitmap == null) {  
    // 如果实例化失败 返回默认的Bitmap对象  
    return defaultBitmapMap;  
} 

你可能感兴趣的:(android内存优化)