Universal-Image-Loader源码阅读(20)-memory/impl/LRULimitedMemoryCache

来源:互联网 发布:毕加索美工钢笔推荐 编辑:程序博客网 时间:2024/05/21 07:49

采用了LRU策略的LimitedMemoryCache


源码:

/** * Limited {@link Bitmap bitmap} cache. Provides {@link Bitmap bitmaps} storing. Size of all stored bitmaps will not to * exceed size limit. When cache reaches limit size then the least recently used bitmap is deleted from cache.<br /> * <br /> * <b>NOTE:</b> This cache uses strong and weak references for stored Bitmaps. Strong references - for limited count of * Bitmaps (depends on cache size), weak references - for all other cached Bitmaps. * * @author Sergey Tarasevich (nostra13[at]gmail[dot]com) * @since 1.3.0 */public class LRULimitedMemoryCache extends LimitedMemoryCache {private static final int INITIAL_CAPACITY = 10;private static final float LOAD_FACTOR = 1.1f;/** Cache providing Least-Recently-Used logic */private final Map<String, Bitmap> lruCache = Collections.synchronizedMap(new LinkedHashMap<String, Bitmap>(INITIAL_CAPACITY, LOAD_FACTOR, true));/** @param maxSize Maximum sum of the sizes of the Bitmaps in this cache */public LRULimitedMemoryCache(int maxSize) {super(maxSize);}@Overridepublic boolean put(String key, Bitmap value) {if (super.put(key, value)) {lruCache.put(key, value);return true;} else {return false;}}@Overridepublic Bitmap get(String key) {lruCache.get(key); // call "get" for LRU logicreturn super.get(key);}@Overridepublic Bitmap remove(String key) {lruCache.remove(key);return super.remove(key);}@Overridepublic void clear() {lruCache.clear();super.clear();}@Overrideprotected int getSize(Bitmap value) {return value.getRowBytes() * value.getHeight();}@Overrideprotected Bitmap removeNext() {//关键方法,删除最后的,就是最近最少使用的Bitmap mostLongUsedValue = null;synchronized (lruCache) {Iterator<Entry<String, Bitmap>> it = lruCache.entrySet().iterator();if (it.hasNext()) {Entry<String, Bitmap> entry = it.next();mostLongUsedValue = entry.getValue();it.remove();}}return mostLongUsedValue;}@Overrideprotected Reference<Bitmap> createReference(Bitmap value) {return new WeakReference<Bitmap>(value);}}


0 0
原创粉丝点击