之前的时候通过软应用图片可以实现对内存图片合理使用。现在把这部分内容单独提取出一个工具类方便使用。
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();