图片缓存之内存缓存技术LruCache,软引用

分享到:

每当碰到一些大图片的时候,我们如果不对图片进行处理就会报OOM异常,
这个问题曾经让我觉得很烦恼,后来终于得到了解决,
那么现在就让我和大家一起分享一下吧。
这篇博文要讲的图片缓存机制,我接触到的有两钟,一种是软引用,另一种是内存缓存技术。
先来看下两者的使用方式,再来作比较。
除了加载图片时要用到缓存处理,还有一个比较重要的步骤要做,就是要先压缩图片。

1、压缩图片
至于要压缩到什么状态就要看自己当时的处境了,压缩图片的时候既要达到一个小的值,又不能让其模糊
,更不能拉伸图片。

  1. /**
  2.          * 加载内存卡图片
  3.          */
  4.         BitmapFactory.Options options = new BitmapFactory.Options();
  5.         options.inJustDecodeBounds = true; // 设置了此属性一定要记得将值设置为false
  6.         Bitmap bitmap = null;
  7.         bitmap = BitmapFactory.decodeFile(url, options);
  8.         int be = (int) ((options.outHeight > options.outWidth ? options.outHeight / 150
  9.                 : options.outWidth / 200));
  10.         if (be <= 0) // 判断200是否超过原始图片高度
  11.             be = 1; // 如果超过,则不进行缩放
  12.         options.inSampleSize = be;
  13.         options.inPreferredConfig = Bitmap.Config.ARGB_4444;
  14.         options.inPurgeable = true;
  15.         options.inInputShareable = true;
  16.         options.inJustDecodeBounds = false;
  17.         try {
  18.             bitmap = BitmapFactory.decodeFile(url, options);
  19.         } catch (OutOfMemoryError e) {
  20.             System.gc();
  21.             Log.e(TAG, "OutOfMemoryError");
  22.         }
昵    称:
验证码:

相关文档: