您的位置:首页 > 产品设计 > UI/UE

Android-Universal-Image-Loader(UIL)使用分析

2014-05-06 15:40 615 查看
Android-Universal-Image-Loader(UIL) 是android端开源的异步图片下载、缓存库...它包含了HTTP异步下载,DISK缓存等功能,由于它设计封装的独立,我们可以很容易的自定义它,下面就分析下他使用注意的地方。

ImageLoader.getInstance().init(ImageLoaderConfiguration ilc);


可以看到设计的入口是个单例,并且初始化函数里需要传一个ImageLoaderConfiguration 参数,这个ImageLoaderConfiguration 提供了很多可配置选项

new ImageLoaderConfiguration.Builder(Context).build();


我们可以通过ImageLoaderConfiguration 的内部类builder,构建一个ImageLoaderConfiguration ,这是builder模式,很多地方都见过了,当然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各个周期或状态下图片的显示,比如图片正在下载,失败等显示的内容。下面是截取的注释,备注下。

whether stub image will be displayed in
ImageView
during image loading

whether stub image will be displayed in
ImageView
if empty URI is passed

whether stub image will be displayed in
ImageView
if image loading fails

whether
ImageView
should be reset before image loading start

whether loaded image will be cached in memory
whether loaded image will be cached on disc
image scale type
decoding options (including bitmap decoding configuration)
delay before loading of image
auxiliary object which will be passed to
ImageDownloader


pre-processor for image Bitmap (before caching in memory)
post-processor for image Bitmap (after caching in memory, before displaying)
how decoded
Bitmap
will be displayed

后面处理好多代码,以后再看吧...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐