disk缓存
主要难点在于内存缓存,disk缓存其实比较简单,就是图片加载完成后把图片文件存到本地方便下次使用
同样,先贴一下官方主页的介绍(主页地址见文章最开始处)
和内存缓存差不多,根据算法不同提供了几种类别,可以自行通过ImageLoaderConfiguration.discCache(..)设置
<ignore_js_op>
不同的限定值设定,是有一个优先级的~ 我专门实验研究了下(actual measured width and height不是太清楚)
优先级 memoryCacheExtraOpstion > width/height > maxWidth/maxHeight > divice screen
缓存池大小的设置~
分强引用和弱引用,弱引用我们知道不用限制~主要是针对强引用部分缓存池的限制
教程(二)里面也提到过,主要分两种:限制图片总数量 和 限制全部图片所占内存大小
对于强引用大小的限定,我们看下UIL框架的默认处理
* Creates default implementation of {@link MemoryCache} - {@link LruMemoryCache}<br />
* Default cache size = 1/8 of available app memory.
*/
public static MemoryCache createMemoryCache (int memoryCacheSize) {
if (memoryCacheSize == 0) {
memoryCacheSize = ( int) (Runtime. getRuntime().maxMemory() / 8);
}
return new LruMemoryCache(memoryCacheSize);
}[/mw_shl_code]
以上,核心代码分析结束~都弄懂了的话,图片的处理已经算是小有所成了,好处嘛~
一方面在使用框架的时候你可以更了解内部的机制,适当时候可以根据项目具体需要做相关继承重写进行修改(最好不要直接修改开源框架源码,保证其完整性)
另一方面更可以当作自己的一个优势点亮点,尤其在面试时多发挥发挥~比如介绍自己项目时,大部分网络数据交互的项目一般都是会有列表多图加载的情况的,你就可以就图片加载部分大谈特谈了~不过聊框架部分有风险,对于此方面知识匮乏的面试官来说, 有时候不明也不一定会觉历,会白白浪费口水~最好结合项目一边演示一边谈,具体技巧这里就不班门弄斧了,可以网上找些帖子看
下面的内容同样是选择性观看
包括UIL框架的一些扩展功能,以及源码的结
--------------------------------------------------------------------------------------------------------
UIL框架在核心的图片缓存技术,图片压缩,异步线程下载图片的传统框架功能以外~
还做了一些其他的
拓展功能
自定义ImageView控件,叫做ImageAware,支持圆角效果等功能
disk保存图片文件名md5编码
图片加载的显示效果,比如淡入的fade效果等等
(此外还有一些扩展的功能,由于是非核心部分不做详细介绍了)
此外还提供Widget~ 这个我就没研究了
源码结构
主要分三大包~下面挨个介绍
UIL的缓存池部分包/类结构
见下图,很清楚的结构,cache缓存包下分成两个部分,disc(disk缓存)包和memory(内存缓存)包
绿色部分是基类父类~ impl是具体实现子类,比如memory的impl包下的那8个,就是我们之前介绍的可以直接使用的不同缓存池类型,项目中有特殊需求的话,也可以自定义一个类继承重写做对应的修改
disk同理,基类+具体实现类,在此基础上多了个naming命名包,是对图片保存文件名称进行md5编码解码处理的
<ignore_js_op>
其他作用呢? 通过钻研肯定是提高我们的技术了,学习别人的类结构设计~ 也能更好的使用图片框架(其他框架差不多都这样逻辑),且对于拓展部分也可以作为自己的亮点在面试中使用 ~