Android最流行的的图片加载源码分析

上传人:飞*** 文档编号:4545933 上传时间:2017-08-20 格式:PDF 页数:28 大小:1.22MB
返回 下载 相关 举报
Android最流行的的图片加载源码分析_第1页
第1页 / 共28页
Android最流行的的图片加载源码分析_第2页
第2页 / 共28页
Android最流行的的图片加载源码分析_第3页
第3页 / 共28页
Android最流行的的图片加载源码分析_第4页
第4页 / 共28页
Android最流行的的图片加载源码分析_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《Android最流行的的图片加载源码分析》由会员分享,可在线阅读,更多相关《Android最流行的的图片加载源码分析(28页珍藏版)》请在金锄头文库上搜索。

1、Android Universal Image Loader 源码分析 1. 功能介绍 1.1 Android Universal Image Loader Android Universal Image Loader 是一个强大的、可高度定制的图片缓存,本文简称为 UIL。 简单的说 UIL 就做了一件事 获取图片并显示在相应的控件上。 1.2 基本使用 1.2.1 初始化 添加完依赖后在 Application或 Activity中初始化 ImageLoader,如下: public class YourApplication extends Application Override pu

2、blic void onCreate() super.onCreate(); ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this) / 添加你的配置需求 .build(); ImageLoader.getInstance().init(configuration); 其中 configuration 表示 ImageLoader的配置信息,可包括图片最大尺寸、线程池、缓存、下载器、解码器等等。 1.2.2 Manifest 配置 添加网络权限。如果允许磁盘缓存,需要添加写外设的权限

3、。 1.2.3 下载显示图片 下载图片,解析为 Bitmap 并在 ImageView 中显示。 imageLoader.displayImage(imageUri, imageView); 下载图片,解析为 Bitmap 传递给回调接口。 imageLoader.loadImage(imageUri, new SimpleImageLoadingListener() Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) / 图片处理 ); 以上是简单使用,更复杂 API 见

4、本文 详细设计 。 1.3 特 点 可配置度高。支持任务线程池、下载器、解码器、内存及磁盘缓存、显示选项等等的配置。 包含内存缓存和磁盘缓存两级缓存。 支持多线程,支持异步和同步加载。 支持多种缓存算法、下载进度监听、 ListView 图片错乱解决等。 2. 总体设计 2.1. 总体设计图 上面是 UIL 的总体设计图。整个库分为 ImageLoaderEngine, Cache及 ImageDownloader, ImageDecoder,BitmapDisplayer, BitmapProcessor五大模块,其中 Cache分为 MemoryCache和 DiskCache两部分。 简

5、单的讲就是 ImageLoader收到加载及显示图片的任务,并将它交给 ImageLoaderEngine, ImageLoaderEngine分发任务到具体线程池去执行,任务通过 Cache及 ImageDownloader获取图片,中间可能经过 BitmapProcessor和ImageDecoder处理,最终转换为 Bitmap交给 BitmapDisplayer在 ImageAware中显示。 2.2. UIL 中的概念 简单介绍一些概念,在 4. 详细设计 中会仔细介绍。 ImageLoaderEngine: 任务分发器,负责分发 LoadAndDisplayImageTask和 P

6、rocessAndDisplayImageTask给具体的线程池去执行,本文中也称其为 engine,具体参考 4.2.6 ImageLoaderEngine.java。 ImageAware: 显示图片的对象,可以是 ImageView等,具体参考 4.2.9 ImageAware.java。 ImageDownloader: 图片下载器,负责从图片的各个来源获取输入流 , 具体参考 4.2.22 ImageDownloader.java。 Cache: 图片缓存,分为 MemoryCache和 DiskCache两部分。 MemoryCache: 内存图片缓存,可向内存缓存缓存图片或从内存

7、缓存读取图片,具体参考 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对象显示在相应

8、的控件 ImageAware上 , 具体参考 4.2.56 BitmapDisplayer.java。 LoadAndDisplayImageTask: 用于加载并显示图片的任务 , 具体参考 4.2.20 LoadAndDisplayImageTask.java。 ProcessAndDisplayImageTask: 用于处理并显示图片的任务 , 具体参考 4.2.19 ProcessAndDisplayImageTask.java。 DisplayBitmapTask: 用于显示图片的任务 , 具体参考 4.2.18 DisplayBitmapTask.java。 3. 流程图 上图为图

9、片加载及显示流程图,在 uil 库中给出,这里用中文重新画出。 4. 详细设计 4.1 类关系图 4.2 核心类功能介绍 4.2.1 ImageLoader.java 图片加载器,对外的主要 API,采取了单例模式 ,用于图片的加载和显示。 主要函数: (1). getInstance() 得到 ImageLoader的单例。通过双层是否为 null 判断提高性能。 (2). init(ImageLoaderConfiguration configuration) 初始化配置参数,参数 configuration为 ImageLoader的配置信息,包括图片最大尺寸、任务线程池、磁盘缓存、下载

10、器、解码器等等。 实现中会初始化 ImageLoaderEngine engine属性,该属性为任务分发器。 (3). displayImage(String uri, ImageAware imageAware, DisplayImageOptions options, ImageLoadingListener listener, ImageLoadingProgressListener progressListener) 加载并显示图片或加载并执行回调接口。 ImageLoader 加载图片主要分为三类接口: displayImage() 表示异步加载并显示图片到对应的 ImageAwar

11、e上。 loadImage() 表示异步加载图片 并执行回调接口。 loadImageSync() 表示同步加载图片。 以上三类接口最终都会调用到这个函数进行图片加载。函数参数解释如下: uri: 图片的 uri。 uri 支持多种来源的图片,包括 http、 https、 file、 content、 assets、 drawable 及自定义,具体介绍可见 ImageDownloader。 imageAware: 一个接口,表示需要加载图片的对象,可包装 View。 options: 图片显示的配置项。比如加载前、加载中、加载失败应该显示的占位图片,图片是否需要在 磁盘缓存,是否需要在内存

12、缓存等。 listener: 图片加载各种时刻的回调接口,包括开始加载、加载失败、加载成功、取消加载四个时刻的回调函数。 progressListener: 图片加载进度的回调接口。 函数流程图如下: 4.2.2 ImageLoaderConfiguration.java ImageLoader的配置信息,包括图片最大尺寸、线程池、缓存、下载器、解码器等等。 主要属性: (1). Resources resources 程序本地资源访问器,用于加载 DisplayImageOptions中设置的一些 App 中图片资源。 (2). int maxImageWidthForMemoryCache

13、 内存缓存的图片最大宽度。 (3). int maxImageHeightForMemoryCache 内存缓存的图片最大高度。 (4). int maxImageWidthForDiskCache 磁盘缓存的图片最大宽度。 (5). int maxImageHeightForDiskCache 磁盘缓存的图片最大高度。 (6). BitmapProcessor processorForDiskCache 图片处理器,用于处理从磁盘缓存中读取到的图片。 (7). Executor taskExecutor ImageLoaderEngine中用于执行从源获取图片任务的 Executor。 (1

14、8). Executor taskExecutorForCachedImages ImageLoaderEngine中用于执行从缓存获取图片任务的 Executor。 (19). boolean customExecutor 用户是否自定义了上面的 taskExecutor。 (20). boolean customExecutorForCachedImages 用户是否自定义了上面的 taskExecutorForCachedImages。 (21). int threadPoolSize 上面两个默认线程池的核心池大小,即最大并发数。 (22). int threadPriority 上面

15、两个默认线程池的线程优先级。 (23). QueueProcessingType tasksProcessingType 上面两个默认线程池的线程队列类型。目前只有 FIFO, LIFO 两种可供选择。 (24). MemoryCache memoryCache 图片内存缓存。 (25). DiskCache diskCache 图片磁盘缓存,一般放在 SD 卡。 (26). ImageDownloader downloader 图片下载器。 (27). ImageDecoder decoder 图片解码器,内部可使用我们常用的 BitmapFactory.decode()将图片资源解码成 B

16、itmap对象。 (28). DisplayImageOptions defaultDisplayImageOptions 图片显示的配 置项。比如加载前、加载中、加载失败应该显示的占位图片,图片是否需要在磁盘缓存,是否需要在内存缓存等。 (29). ImageDownloader networkDeniedDownloader 不允许访问网络的图片下载器。 (30). ImageDownloader slowNetworkDownloader 慢网络情况下的图片下载器。 4.2.3 ImageLoaderConfiguration.Builder.java 静态内部类 Builder 模式,用于构造参数繁多的 ImageLoaderConf

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 调研报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号