Android-Universal-Image-Loader(UIL) 是android端开源的异步图片下载、缓存库...它包含了HTTP异步下载,DISK缓存等功能,由于它设计封装的独立,我们可以很容易的自定义它,下面就分析下他使用注意的地方。
ImageLoader.getInstance().init(ImageLoaderConfiguration ilc);
可以看到设计的入口是个单例,并且初始化函数里需要传一个ImageLoaderConfiguration 参数,这个ImageLoaderConfiguration 提供了很多可配置选项
new ImageLoaderConfiguration.Builder(Context).build();
这个Builder里我们可以配置很多项:
taskExecutor:这是提交任务的线程池
默认:(核心线程数3个,最大线程数3个,阻塞队列是(先进先出的)FIFO、可以配置(后进先出)LIFO,)
taskExecutorForCachedImages:这是缓存任务线程池(应该是读本地时提交到它,有必要弄两个线程池吗?)
默认配置:同上
discCache:这是缓存操作配置
1:discCacheFileNameGenerator--缓存文件名生成器,只要是生成图片的名字。
2:discCache--这是缓存策略(可以配置总文件数量,总文件大小);
默认:disc缓存策略是无限制的,即不会修剪缓存目录下的文件
你可以配置文件数量限制缓存策略或总文件大小的策略。
这里你需要配置下缓存目录,默认是sdcard/uil-images ,当sdcard没有挂载时是缓存到data/data/appDir/cache/image 目录下的。
所以建议配置下缓存目录(貌似没有提供参数配置,不过你可以直接动源码,开源的吗...)
memoryCache:这是内存缓存策略
默认它会根据android的API level版本大于9(2.3)时会实例一个LruMemoryCache(int maxSize),当maxSize传0时,它会初始化为运行时最大内存的1/8,即内存缓存的图片 不会超过这个maxSzie, 这个对象内部还有个LinkHashMap,它才是真正的存放目的地,这东西有个好处,就是遍历时是有序的,并且根据它构造时的参数 accessOrder,可以实现LRU,即最后访问的最先遍历出来,否则是按照插入顺序,当要remove时,我们删除的是访问最少的。
还有当Api level 小于9时,它使用的是LRULimitedMemoryCache,这个东西内部当内存总量小于maxSize时保存在一个LinkHashMap中硬引用...其他再熟悉,记得要 配置下maxSize,建议最大不超过16mb。
denyCacheImageMultipleSizesInMemory:这个表示同一个URL图片是否缓存多份不同尺寸的,默认是false,即可以有多份。
downloader:下载器
主要实现了一个getInputStream的方法,它是从不同的源获得流,顺便提下,UIL它不仅可以从网络获取图片,还可以通过Schema从本地decode图片如:file content http(s) assets drawable (btw 本地还需要它吗)。
decoder:图片解码器
BaseImageDecoder实现类,实现了decode(ImageDecodingInfo info) 根据参数解码图片。
defaultDisplayImageOptions:
类型为DisplayImageOptions,封装了图片在loading各个周期或状态下图片的显示,比如图片正在下载,失败等显示的内容。下面是截取的注释,备注下。
ImageView
during image loading ImageView
if empty URI is passed ImageView
if image loading fails ImageView
should be reset before image loading start ImageDownloader
Bitmap
will be displayed 后面处理好多代码,以后再看吧...