Android-Universal-Image-Loader(UIL)源码解析(二)
来源:互联网 发布:java实例变量 编辑:程序博客网 时间:2024/06/07 05:23
当应用打算从网络请求一张图片时,我们期待程序首先从内存中去获取,如果内存中没有那就从存储设备中去获取,如果存储设备中也没有,那就从网络下载这张图片。所以本节我们学习如何在内存中缓存图片。UIL内存缓存的类结构图:
1.作为一个缓存工具类,首先其应该具有如下功能:
2.其次,要考虑数据的存储方式和LRUD实现(UIL使用一个Map以弱引用的方式存储外界的缓存对象)
3.既然是内存缓存,我们就需要考虑缓存总容量,这里用图片的强应用计算他的大小
至此,一个内存缓存工具类的要素都已指出。下面我们来观察具体的实现。
前面我们说,缓存的总用量是有限的,那么就需要考虑当缓存满时,先淘汰那些对象,这就涉及缓存策略的问题了。
UIL提供了各种策略缓存类
FIFO
最大位图
LRU 利用了LinkedHashMap的访问特性
Linked内部含有一个private transient Entry header;来记录元素插入的顺序或者是元素被访问的顺序。利用这个线性结构的对象,可以帮助记录entry加入的前后顺序或者记录entry被访问的频率(最少被访问的entry靠前,最近访问的entry靠后)。大致的过程如下:
new LinkedHashMap(10, 0.75, true);
其中前面两个参数就是HashMap构造函数需要的参数,后面的true表明LinkedHashMap按照访问的次序来排序。
按照访问的次序来排序的含义:当调用LinkedHashMap的get(key)或者put(key, value)时,碰巧key在map中被包含,那么LinkedHashMap会将key对象的entry放在线性结构的最后。
按照插入顺序来排序的含义:调用get(key), 或者put(key, value)并不会对线性结构产生任何的影响。
new LinkedHashMap(10, 0.75, true);
其中前面两个参数就是HashMap构造函数需要的参数,后面的true表明LinkedHashMap按照访问的次序来排序。
按照访问的次序来排序的含义:当调用LinkedHashMap的get(key)或者put(key, value)时,碰巧key在map中被包含,那么LinkedHashMap会将key对象的entry放在线性结构的最后。
按照插入顺序来排序的含义:调用get(key), 或者put(key, value)并不会对线性结构产生任何的影响。
指定缓存时长策略
指定比较器
参考资料:
http://blog.csdn.net/hsuxu/article/details/7454212
http://blog.csdn.net/chunqiuwei/article/details/37662565
源码下载:
0 0
- Android-Universal-Image-Loader(UIL)源码解析(二)
- Android-Universal-Image-Loader(UIL)源码解析(一)
- Android-Universal-Image-loader源码解析
- Android-Universal-Image-Loader源码解析
- (UIL)使用3之Android Universal Image Loader 源码分析
- 源码解析 Universal Image Loader
- Universal-Image-Loader源码解析
- universal-image-loader源码解析
- universal-image-loader源码解析
- Android-Universal-Image-Loader(UIL)使用分析
- Android Universal-Image-Loader 解析
- Android分析Universal-Image-Loader源码解析收获
- Android开源框架Universal-Image-Loader源码解析
- Android 图片加载框架Universal-Image-Loader源码解析
- Android Universal Image Loader 源码分析(二)
- Universal-Image-Loader源码
- Universal-Image-Loader解析
- 【UIL框架】Universal-Image-Loader完全解析(一)之介绍与使用详解
- 点击A显示,点击其他地方隐藏
- IOS 计算两个时区之间的时间差
- Java设计模式-工厂方法模式和抽象工厂模式
- appium 之Xpath使用
- Android获取View的高度
- Android-Universal-Image-Loader(UIL)源码解析(二)
- caffe accuracy_layer.cpp 解读
- appium之Context切换
- _USER_ERROR__missing_dlib_all_source_cpp_file__OR......
- Android ViewPager放入多个XML如何监听其的控件_程序架构参考
- Tornado编译vxworks本质及过程
- python中用的到奇淫技巧
- 15.5 匿名内部类
- [bzoj 2152] 聪聪可可 树上点分治