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 庫中給出,這裏用中文重新畫出。