之前的时候通过软应用图片可以实现对内存图片合理使用。现在把这部分内容单独提取出一个工具类方便使用。
public class BitmapSoftCache { static PRivate BitmapSoftCache mInstance; private HashMap<Integer, SoftRefBitmap> mHashMap; //垃圾引用队列,所引用的对象已经被回收,则将该引用存入到队列中 private ReferenceQueue<Bitmap> mQueue; private BitmapSoftCache() { mHashMap = new HashMap<>(); mQueue = new ReferenceQueue<>(); } public static BitmapSoftCache getInstance() { if (mInstance == null) { mInstance = new BitmapSoftCache(); } return mInstance; } //添加图片到内存中 public void addBitmap(Integer key, Bitmap bitmap) { cleanRecycleCache(); SoftRefBitmap refBitmap = new SoftRefBitmap(key, bitmap, mQueue); mHashMap.put(key, refBitmap); } //在内存中得到图片 public Bitmap getBitmap(Integer key){ Bitmap bitmap = null; if (mHashMap.containsKey(key)){ SoftRefBitmap refBitmap = (SoftRefBitmap)mHashMap.get(key); bitmap = (Bitmap)refBitmap.get(); } return bitmap; } private void cleanRecycleCache() { SoftRefBitmap refBitmap = null; while ((refBitmap = (SoftRefBitmap) mQueue.poll()) != null) { mHashMap.remove(refBitmap.mKey); Print.i("aaa","recycle queue"); } } public void cleanAllCache(){ cleanRecycleCache(); mHashMap.clear(); System.gc(); }}引用图片类
public class SoftRefBitmap extends SoftReference<Bitmap> { public int mKey ; public SoftRefBitmap(Bitmap r) { super(r); } public SoftRefBitmap(int key, Bitmap bitmap, ReferenceQueue<Bitmap> queue) { super(bitmap, queue); mKey = key; }}如何使用:
1.添加图片:
BitmapSoftCache.getInstance().addBitmap(postion, bitmap);2.获取图片:
Bitmap bitmap = BitmapSoftCache.getInstance().getBitmap(position);3.清空缓存:
BitmapSoftCache.getInstance().cleanAllCache();新闻热点
疑难解答