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 類關係圖

這裏寫圖片描述

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