记一次使用LruCache并探究

一.大致说一下,公司让我写一个扫码并检测的App,显示二维码一百万次,显示一维码一百万次。显示用的ZXing开源库,扫码使用的公司生产的Pos机。

二.之前都是用zxing库直接生成的二维码和一维码,所以要生成两百万次,但是虽然是两百万次但是可以有重复的。实际上就是64张码不停的扫两百万次。所以有很多重复的码。

三,之前没有使用LruCache缓存,以至于要生成两百万次,所以时间要用一个月!!!很慢。上网查了下就是Lru可以契合使用。

四,下面介绍LruCache
LruCache底层是LinkedhashMap,
LruCache可以直接在Android里面用,因为已经集成了在Android的jar包里面了。
怎么用

//缓存大小
    int maxSize = (int) Runtime.getRuntime().maxMemory();
    int cacheSize = maxSize / 1024 / 8;

stringBitmapLruCache = new LruCache<String,Bitmap>(cacheSize){
            @Override
            protected int sizeOf(String key, Bitmap value) {
                return super.sizeOf(key, value);
            }
            @Override
            protected void entryRemoved(boolean evicted, String key, Bitmap oldValue, Bitmap newValue) {
                // 当调用put或remove时触发此方法,可以在这里完成一些资源回收的操作
                super.entryRemoved(evicted, key, oldValue, newValue);
            }
        };

上面是拿了八分之一的程序内存当cache大小,也可以自己定义。
分析源码,
在这里插入图片描述

  1. 这是一个对持有的有限数据强引用的缓存,每一次一个数据通过,就会被移到队列的头部。
  2. 当数据加到已经满的缓存中,在队列尾部的数据就会被删除,并且可能会被gc垃圾回收。
  3. 如果你的缓存数据一定会被释放掉,那就重写 entryRemoved方法。
  4. 重写sizeof来确定cache不同的大小

官方给的例子

int cacheSize = 4 * 1024 * 1024; // 4MiB   
LruCache<String, Bitmap> bitmapCache = new LruCache<String, Bitmap>(cacheSize) {
       protected int sizeOf(String key, Bitmap value)
        {           	return value.getByteCount();   
   			}  
     }

并且是线程安全的。

两个方法来put和get

    public void addBitmapToMemoryCache(StringBuffer key, Bitmap bitmap) {
        stringBitmapLruCache.put(String.valueOf(key), bitmap);
    }

    public Bitmap getBitmapFromMemCache(StringBuffer key) {
        return stringBitmapLruCache.get(String.valueOf(key));
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值