一.大致说一下,公司让我写一个扫码并检测的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大小,也可以自己定义。
分析源码,
官方给的例子
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));
}