Android Bitmap的缓存实现再也不怕ListView多图 oom了

一般网上Bitmap的缓存方法都是采用软引用的方式,其实还有更好的方法,这也是Google官方推荐的方法。废话不说,放代码。

import android.graphics.Bitmap;
import android.support.v4.util.LruCache;

/**
 * Created by Cying on 14-2-21.
 */
public class BitmapCache {

    public static BitmapCache instance;

    public static BitmapCache getInstance() {
        if (instance == null) {
            instance = new BitmapCache();
        }
        return instance;
    }

    private LruCache<String, Bitmap> mImageCache;

    private BitmapCache() {
        // 获取到可用内存的最大值,使用内存超出这个值会引起OutOfMemory异常。
        // LruCache通过构造函数传入缓存值,以KB为单位。
        int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
        // 使用最大可用内存值的1/8作为缓存的大小。
        int cacheSize = maxMemory / 8;
        mImageCache = new LruCache<String, Bitmap>(cacheSize) {
            @Override
            protected int sizeOf(String key, Bitmap bitmap) {
                // 重写此方法来衡量每张图片的大小,默认返回图片数量。
                return   ImageHelper.getByteCount(bitmap) / 1024;
            }
        };
    }

    public void addBitmapToCache(String path, Bitmap bitmap) {

        if(getBitmapByPath(path)!=null)
        {
            mImageCache.remove(path);
        }
        mImageCache.put(path, bitmap);


    }

    public Bitmap getBitmapByPath(String path) {

        return mImageCache.get(path);
    }


    public void removeBitmap(String path)
    {
        Bitmap bitmap=getBitmapByPath(path);
        if(bitmap!=null&&!bitmap.isRecycled())
        {
            bitmap.recycle();
        }
        mImageCache.remove(path);
    }


}



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值