专栏名称: 郭霖
Android技术分享平台,每天都有优质技术文章推送。你还可以向公众号投稿,将自己总结的技术心得分享给大家。
目录
相关文章推荐
复利大王  ·  江浙沪美女留子回国下嫁怀孕后悔 ·  21 小时前  
复利大王  ·  某航离谱瓜! ·  21 小时前  
复利大王  ·  湘ya一骨科的瓜? ·  昨天  
复利大王  ·  老同学中捞一捞能不能找到免费P友 ·  昨天  
复利大王  ·  不讲武德!中x银行? ·  昨天  
51好读  ›  专栏  ›  郭霖

图片加载框架Universal-Image-Loader源码解析

郭霖  · 公众号  · android  · 2017-05-12 08:01

正文

请到「今天看啥」查看全文


基本用法

关于基本用法想必很多朋友也知道了,或者直接看下Github说明里的使用方法,这里就不再赘述。

和源码见面之前,先和几个重要的类打招呼:

ImageLoaderEngine: 任务分发器,负责分发LoadAndDisplayImageTask和ProcessAndDisplayImageTask给具体的线程池去执行。

ImageAware: 显示图片的对象,可以是ImageView等。

ImageDownloader: 图片下载器,负责从图片的各个来源获取输入流。

Cache: 图片缓存,分为MemoryCache和DiskCache两部分。

MemoryCache: 内存图片缓存,可向内存缓存缓存图片或从内存缓存读取图片。

DiskCache: 本地图片缓存,可向本地磁盘缓存保存图片或从本地磁盘读取图片。

ImageDecoder: 图片解码器,负责将图片输入流InputStream转换为Bitmap对象。

BitmapProcessor: 图片处理器,负责从缓存读取或写入前对图片进行处理。

BitmapDisplayer: 将Bitmap对象显示在相应的控件ImageAware上。

LoadAndDisplayImageTask: 用于加载并显示图片的任务。

ProcessAndDisplayImageTask: 用于处理并显示图片的任务。

DisplayBitmapTask: 用于显示图片的任务。

其中有个全局图片加载配置类贯穿整个框架, ImageLoaderConfiguration ,可以配置的东西实在有点多:

主要是图片最大尺寸、线程池、缓存、下载器、解码器等等。

经过前面那么多的铺垫,终于迎来了源码~~

源码分析

整个框架的源码上万,全部讲完不可能,最好的方式还是按照加载流程走一遍,细枝末节各位可以自己慢慢研究,一旦整体把握好了,其他的一切就水到渠成,切勿只见树木不见森林,迷失在各种代码细节中~~

好了,简单点,讲代码的方式简单点,从最简单的代码切入:

imageLoader.displayImage(imageUri, imageView);

进入方法:

ImageAware 是 ImageView 的包装类,持有 ImageView对象 的弱引用,防止 ImageView 出现内存泄漏发生。主要是提供了获取 ImageView 宽度高度和 ScaleType 等。

最终会执行这一个重载方法:

这个方法基本描绘出了整个图片加载的流程,重要的地方已经加上注释。

if (listener == null ) 的 listener 就是上面基本使用说明复杂版本的进度回调接口 ImageLoadingListener,大家看下就知道,如果没有配置的话设置为默认,而默认其实啥都没做,方法都是空实现。

if (options == null







请到「今天看啥」查看全文