通过软应用来控制内存中的图片(二)

  之前的时候通过软应用图片可以实现对内存图片合理使用。现在把这部分内容单独提取出一个工具类方便使用。

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();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wb175208

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值