对于大部分新手来说 OutOfMemory 是经常出现的错误,尤其是在大量使用 Bitmap 时这样的错误更是时常出现。
对于新手来说以下几点可以很好的帮助你避免在使用 Bitmap 过程中出现的 OutOfMemory 错误。
1、及时手动回收 Bitmap 所占用的内存;
手动回收 Bitmap 占用内存可以很好的避免错误。如何手动回收呢?Bitmap 类提供了 recycle() 方法。如方法名它具
有回收 Bitmap 内存的功能。所以在使用完 Bitmap 后(确保之后无需使用,不然会出现空指针异常),调用该方法
并提示系统回收机制回收该内存(System.gc())。
// 先判断 bitmap 是否已经回收
if(bitmap != null && !bitmap.isRecycled()){
// 回收并且置为null
bitmap.recycle();
bitmap = null;
//提示系统回收
System.gc();
}
在使用 Bitmap 是可以先获取其宽、高,再判断是否需要对图片进行压缩。
获取宽高:
int width;//宽
int height;//高
BitmapFactory.Options opts = new BitmapFactory.Options();
// 设置inJustDecodeBounds为true
//设置为TRUE时返回的bitmap对象为null,需要使用bitmap实例时得重新设置为FALSE
opts.inJustDecodeBounds = true;
// 使用decodeFile方法得到图片的宽和高
BitmapFactory.decodeFile(path, opts);
width=opts.outWidth;
height=opts.outHeight;
判断后压缩:
opts.inSampleSize = 2;//图片宽高都为原来的二分之一,即图片为原来的四分之一
在压缩时主要是对其边界进行压缩。
3、缓存 Bitmap 对象
在可能出现同一界面使用同一 Bitmap 多次的情况下,可以先对该 Bitmap 对象进行缓存。因为通过 BitmapFactory 实例出来
的 Bitmap 对象是不同的对象会占据更多的内存。