Android Universal Image Loader 学习笔记(一)

1. 功能介绍

1.1 Android Universal Image Loader

Android Universal Image Loader 是一个强大的、可高度定制的图片缓存,本文简称为UIL
简单的说 UIL 就做了一件事——获取图片并显示在相应的控件上。

1.2 基本使用

1.2.1 初始化

添加完依赖后在ApplicationActivity中初始化ImageLoader,如下:

public class YourApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this)
            // 添加你的配置需求
            .build();
        ImageLoader.getInstance().init(configuration);
    }
}

其中 configuration 表示ImageLoader的配置信息,可包括图片最大尺寸、线程池、缓存、下载器、解码器等等。

1.2.2 Manifest 配置
<manifest>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <application
        android:name=".YourApplication"
        …… >
        ……
    </application>
</manifest>

添加网络权限。如果允许磁盘缓存,需要添加写外设的权限。

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 见本文详细设计

1.3 特点

  • 可配置度高。支持任务线程池、下载器、解码器、内存及磁盘缓存、显示选项等等的配置。
  • 包含内存缓存和磁盘缓存两级缓存。
  • 支持多线程,支持异步和同步加载。
  • 支持多种缓存算法、下载进度监听、ListView 图片错乱解决等。

2. 总体设计

2.1. 总体设计图

这里写图片描述
上面是 UIL 的总体设计图。整个库分为ImageLoaderEngineCacheImageDownloaderImageDecoderBitmapDisplayerBitmapProcessor五大模块,其中Cache分为MemoryCacheDiskCache两部分。

简单的讲就是ImageLoader收到加载及显示图片的任务,并将它交给ImageLoaderEngineImageLoaderEngine分发任务到具体线程池去执行,任务通过CacheImageDownloader获取图片,中间可能经过BitmapProcessorImageDecoder处理,最终转换为Bitmap交给BitmapDisplayerImageAware中显示。

2.2. UIL 中的概念

简单介绍一些概念,在4. 详细设计中会仔细介绍。
ImageLoaderEngine:任务分发器,负责分发LoadAndDisplayImageTaskProcessAndDisplayImageTask给具体的线程池去执行,本文中也称其为engine,具体参考4.2.6 ImageLoaderEngine.java

ImageAware:显示图片的对象,可以是ImageView等,具体参考4.2.9 ImageAware.java

ImageDownloader:图片下载器,负责从图片的各个来源获取输入流, 具体参考4.2.22 ImageDownloader.java

Cache:图片缓存,分为MemoryCacheDiskCache两部分。

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

3. 流程图

这里写图片描述
上图为图片加载及显示流程图,在 uil 库中给出,这里用中文重新画出。

4. 详细设计

4.1 类关系图

这里写图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章