上面是 UIL 的总体设计图。整个库分为ImageLoaderEngine
,Cache
及ImageDownloader
,ImageDecoder
,BitmapDisplayer
,BitmapProcessor
五大模块,其中Cache
分为MemoryCache
和DiskCache
两部分。
简单的讲就是ImageLoader
收到加载及显示图片的任务,并将它交给ImageLoaderEngine
,ImageLoaderEngine
分发任务到具体线程池去执行,任务通过Cache
及ImageDownloader
获取图片,中间可能经过BitmapProcessor
和ImageDecoder
处理,最终转换为Bitmap
交给BitmapDisplayer
在ImageAware
中显示。
简单介绍一些概念,在4. 详细设计
中会仔细介绍。
ImageLoaderEngine:任务分发器,负责分发LoadAndDisplayImageTask
和ProcessAndDisplayImageTask
给具体的线程池去执行,本文中也称其为engine
,具体参考4.2.6 ImageLoaderEngine.java
。
ImageAware:显示图片的对象,可以是ImageView
等,具体参考4.2.9 ImageAware.java
。
ImageDownloader:图片下载器,负责从图片的各个来源获取输入流, 具体参考4.2.22 ImageDownloader.java
。
Cache:图片缓存,分为MemoryCache
和DiskCache
两部分。
MemoryCache:内存图片缓存,可向内存缓存缓存图片或从内存缓存读取图片,具体参考4.2.24 MemoryCache.java
。
DiskCache:本地图片缓存,可向本地磁盘缓存保存图片或从本地磁盘读取图片,具体参考4.2.38 DiskCache.java
。
ImageDecoder:图片解码器,负责将图片输入流InputStream
转换为Bitmap
对象, 具体参考4.2.53 ImageDecoder.java
。
BitmapProcessor:图片处理器,负责从缓存读取或写入前对图片进行处理。具体参考4.2.61 BitmapProcessor.java
。
BitmapDisplayer:将Bitmap
对象显示在相应的控件ImageAware
上, 具体参考4.2.56 BitmapDisplayer.java
。
LoadAndDisplayImageTask:用于加载并显示图片的任务, 具体参考4.2.20 LoadAndDisplayImageTask.java
。
ProcessAndDisplayImageTask:用于处理并显示图片的任务, 具体参考4.2.19 ProcessAndDisplayImageTask.java
。
DisplayBitmapTask:用于显示图片的任务, 具体参考4.2.18 DisplayBitmapTask.java
。
上图为图片加载及显示流程图,在 uil 库中给出,这里用中文重新画出。