您的位置:首页 > 移动开发 > Android开发

Android Universal Image Loader 学习笔记(一)

2015-08-25 22:30 316 查看

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
    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 的总体设计图。整个库分为
ImageLoaderEngine
Cache
ImageDownloader
ImageDecoder
BitmapDisplayer
BitmapProcessor
五大模块,其中
Cache
分为
MemoryCache
DiskCache
两部分。

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

2.2. UIL 中的概念

简单介绍一些概念,在
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


3. 流程图




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

4. 详细设计

4.1 类关系图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: