Android 开源框架Universal-Image-Loader的设计思路

首先我们来看一张粗略的ImageLoader的设计图
这里写图片描述

可以看到ImageLoader框架一共有5个核心的部分:
1. ImageLoaderEngine
2. Cache
3. ImageDownLoader
4. ImageDecoder
5. BitmapDisplayer , BitmapProcessor


ImageLoader收到加载及显示图片的任务,并将它交给ImageLoaderEngine,ImageLoaderEngine分发任务到具体线程池去执行,任务通过Cache和ImageDownLoader获取图片,中间可能经过BitmapProcessor和ImageDecoder处理,最终转换为Bitmap交给BitmapDisplayer在ImageAware中显示。

上面出现了很多陌生的词,别担心,接下来我们来看看它们到底是什么以及各自的功能:
1. ProcessAndDisplayImageTask: 当缓存中有该图片时,就会启动这个任务, 用于处理并显示图片的任务。
2. LoadAndDisplayImageTask: 如果缓存中没有该图片,则会启动这个任务,用于加载并显示图片的任务。
3. ImageDownLoader : 图片下载器,负责从图片的各个来源获取输入流。
4. ImagDecoder : 图片解码器,负责将图片输入流InputStream转换为Bitmap对象。
5. BitmapProcessor : 图片处理器,负责从缓存读取后或写入前堆图片进行处理。
6. DisplayBitmapTask:用于显示图片的任务。

接下来我们就来看看当ImageLoader去加载图片时做了些什么把

   public void displayImage(String uri, ImageView imageView) {

    }

ImageLoader.getInstance().displayImage(url,imageview);这个方法可以将一张图片显示在ImageView控件上,今天我不分析源码,仅从设计思路来分析它到底是如何完成的,还是来看张图吧:
这里写图片描述

大家看到这里肯定对LoadAndDisplayImageTask很感兴趣,好吧,我来满足你….
这里写图片描述

这里面比较关键的就是tryLoadBitmap()这个方法了,让我们来看看它的庐山真面目吧
这里写图片描述

好了,这几张图将Image-Loader的工作原理给清楚的展示了出来。

现在我再来整体的总结一下:
1. 判断图片的内存缓存是否存在 ——- 存在就直接执行步骤8
2. 判断图片的磁盘缓存是否存在 ——- 存在就直接执行步骤5
3. 从网络上下载图片
4. 如果允许磁盘缓存就将图片缓存到磁盘上
5. 将图片decode成Bitmap对象
6. 根据DisplayImageOptions配置对图片进行预处理(pre-process)
7. 将bitmap对象缓存到内存中
8. 根据DisplayImageOptions配置对图片进行后处理 ( post-process)
9. 执行DisplayBitmapTask将图片显示在相应的控件上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值