捕获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

  1. ALPHA_8:每个像素占用1byte内存。
  2. ARGB_4444:每个像素占用2byte内存
  3. ARGB_8888:每个像素占用4byte内存
  4. RGB_565:每个像素占用2byte内存

Options类的inSampleSize采样率

当inSampleSize=1时,采样后的图片为图片的原始大小。
除了1以外,inSampleSize的取值应该总为2的整数倍,否则会【向下取整】,取一个最接近2的整数倍,比如inSampleSize=3时,系统会取inSampleSize=2
当inSampleSize=2时,采样后的图片的宽高均为原始图片宽高的1/2