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

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 

后面处理好多代码,以后再看吧...


你可能感兴趣的:(android,异步)