Universal-Image-Loader源码阅读(12)-cache/BaseMemoryCache
2016-08-22 16:20
471 查看
作为MemoryCache的第一个实现的抽象类,它主要的共鞥是定义了基本的存储方式--采用弱引用的方法,并且支持多线程的。
源码:
/**
* Base memory cache. Implements common functionality for memory cache. Provides object references (
* {@linkplain Reference not strong}) storing.
*
* @author Sergey Tarasevich (nostra13[at]gmail[dot]com)
* @since 1.0.0
*/
public abstract class BaseMemoryCache implements MemoryCache {
/** Stores not strong references to objects */
private final Map<String, Reference<Bitmap>> softMap = Collections.synchronizedMap(new HashMap<String, Reference<Bitmap>>());
@Override
public Bitmap get(String key) {
Bitmap result = null;
Reference<Bitmap> reference = softMap.get(key);
if (reference != null) {
result = reference.get();
}
return result;
}
@Override
public boolean put(String key, Bitmap value) {
softMap.put(key, createReference(value));
return true;
}
@Override
public Bitmap remove(String key) {
Reference<Bitmap> bmpRef = softMap.remove(key);
return bmpRef == null ? null : bmpRef.get();
}
@Override
public Collection<String> keys() {
synchronized (softMap) {
return new HashSet<String>(softMap.keySet());
}
}
@Override
public void clear() {
softMap.clear();
}
/** Creates {@linkplain Reference not strong} reference of value */
protected abstract Reference<Bitmap> createReference(Bitmap value);
}
源码:
/**
* Base memory cache. Implements common functionality for memory cache. Provides object references (
* {@linkplain Reference not strong}) storing.
*
* @author Sergey Tarasevich (nostra13[at]gmail[dot]com)
* @since 1.0.0
*/
public abstract class BaseMemoryCache implements MemoryCache {
/** Stores not strong references to objects */
private final Map<String, Reference<Bitmap>> softMap = Collections.synchronizedMap(new HashMap<String, Reference<Bitmap>>());
@Override
public Bitmap get(String key) {
Bitmap result = null;
Reference<Bitmap> reference = softMap.get(key);
if (reference != null) {
result = reference.get();
}
return result;
}
@Override
public boolean put(String key, Bitmap value) {
softMap.put(key, createReference(value));
return true;
}
@Override
public Bitmap remove(String key) {
Reference<Bitmap> bmpRef = softMap.remove(key);
return bmpRef == null ? null : bmpRef.get();
}
@Override
public Collection<String> keys() {
synchronized (softMap) {
return new HashSet<String>(softMap.keySet());
}
}
@Override
public void clear() {
softMap.clear();
}
/** Creates {@linkplain Reference not strong} reference of value */
protected abstract Reference<Bitmap> createReference(Bitmap value);
}
相关文章推荐
- Universal-Image-Loader源码阅读(14)-memory/impl/WeakMemoryCache
- Universal-Image-Loader源码阅读(16)-memory/impl/FuzzyKeyMemoryCache
- Universal-Image-Loader源码阅读(13)-cache/LimitedMemoryCache
- Universal-Image-Loader源码阅读(15)-memory/impl/LruMemoryCache
- Universal-Image-Loader源码阅读(17)-memory/impl/LimitedAgeMemoryCache
- Universal-Image-Loader源码阅读(10)-utils/MemoryCacheUtils
- Universal-Image-Loader源码阅读(18)-memory/impl/FIFOLimitedMemoryCache
- Universal-Image-Loader源码阅读(20)-memory/impl/LRULimitedMemoryCache
- Universal-Image-Loader源码阅读(23)--BaseDiskCache
- Universal_image-Loader源码阅读(22)-disc/DiskCache
- Universal-Image-Loader源码阅读(24)-LimitedAgeDiskCache
- Universal-Image-Loader源码阅读(29)-BaseImageDownloader
- Universal-Image-Loader源码阅读(8)-core/imageaware/NonViewAware
- 【第五篇】Volley代码修改之图片二级缓存以及相关源码阅读(重写ImageLoader.ImageCache)
- Universal-Image-Loader源码阅读(30)-CircleBitmapDisplayer
- Universal-Image-Loader源码阅读(28)-ImageDownloader
- Universal-Image-Loader源码阅读(29)-BitmapDisplayer
- Universal-Image-Loader源码阅读(1)-开篇
- Android开源框架Universal-Image-Loader学习四——LimitedMemoryCache的一些子集
- Universal-Image-Loader源码阅读(7)-core/imageaware/ImageViewAware