Android使用LruCache来缓存Bitmap

Picasso为追求小而美,有功能取舍,比如,它无法支持下载动态图片。

如果你有这个需求,可以考虑使用Google的Glide或Facebook的Fresco。它们各有特点,Glide比较小巧,Fresco性能好。

上面的库都有缓存机制,如果自己实现的话,可以使用许多缓存机制使用一种叫作LRU(least recently used,最近最少使用)的存储策略。基于该种策略,当存储空间用尽时,缓存会自动清除最近最少使用的对象。

初始化LruCache来缓存Bitmap

LruCache<String, Bitmap> mLruCache;
 
    //获取手机最大内存,单位kb
    int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
    //一般都将1/8设为LruCache的最大缓存
    int cacheSize = maxMemory / 8;
 
    mLruCache = new LruCache<String, Bitmap>(maxMemory / 8) {
        /**
        * 这个方法从源码中看出来是设置已用缓存的计算方式的
        * 默认返回的值是 1,也就是每缓存一张图片就将已用缓存大小加 1
        * 缓存图片看的是占用的内存的大小,每张图片的占用内存也是不一样的
        * 因此要重写这个方法,手动将这里改为本次缓存的图片的大小
        */
        @Override
        protected int sizeOf(String key, Bitmap value) {
            return value.getByteCount() / 1024;
        }
    };

使用

 //加入缓存
    mLruCache.put("key", bitmap);
    //从缓存中读取
    Bitmap bitmap = mLruCache.get("key");

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值