捕获OutOfMemoryError
因为Bitmap非常耗内存,了避免应用在分配Bitmap内存的时候出现OutOfMemory异常以后Crash掉,需要特别注意实例化Bitmap部分的代码。通常,在实例化Bitmap的代码中,一定要对OutOfMemory异常进行捕获。很多开发者会习惯性的在代码中直接捕获Exception。但是对于OutOfMemoryError来说,这样做是捕获不到的。因为OutOfMemoryError是一种Error,而不是Exception。
Bitmap bitmap = null;
try {
// 实例化Bitmap
bitmap = BitmapFactory.decodeFile(path);
} catch (OutOfMemoryError e) {
}
if (bitmap == null) {
return defaultBitmapMap; // 如果实例化失败 返回默认的Bitmap对象
}
作者:李李哈哈哈
链接:https://www.jianshu.com/p/c77158b6e07e
Android Bitmap默认的色彩模式是ARGB_8888
Options类的inPreferredConfig
- ALPHA_8:每个像素占用1byte内存。
- ARGB_4444:每个像素占用2byte内存
- ARGB_8888:每个像素占用4byte内存
- RGB_565:每个像素占用2byte内存
Options类的inSampleSize采样率
当inSampleSize=1时,采样后的图片为图片的原始大小。
除了1以外,inSampleSize的取值应该总为2的整数倍,否则会【向下取整】,取一个最接近2的整数倍,比如inSampleSize=3时,系统会取inSampleSize=2
当inSampleSize=2时,采样后的图片的宽高均为原始图片宽高的1/2