一、ImageLaoder介紹
<< Universal ImageLoader 是很早開源的圖片緩存,在早期被很多應用使用
- 多線程下載圖片,圖片可以來源於網絡,文件系統,項目文件夾assets中以及drawable中等
- 支持隨意的配置ImageLoader,例如線程池,圖片下載器,內存緩存策略,硬盤緩存策略,圖片顯示選項以及其他的一些配置
- 支持圖片的內存緩存,文件系統緩存或者SD卡緩存
- 支持圖片下載過程的監聽
- 根據控件(ImageView)的大小對Bitmap進行裁剪,減少Bitmap占用過多的內存
- 較好的控制圖片的加載過程,例如暫停圖片加載,重新開始加載圖片,一般使用在ListView,GridView中,滑動過程中暫停加載圖片,停止滑動的時候去加載圖片
- 提供在較慢的網絡下對圖片進行加載
- 默認實現多種內存緩存算法 這幾個圖片緩存都可以配置緩存算法,不過 ImageLoader 默認實現了較多緩存算法,如 Size 最大先刪除、使用最少先刪除、最近最少使用、先進先刪除、時間最長先刪除等。
<<ImageLoader的設計及優點
設計流程:
ImageLoader收到展示和加載圖片的任務,並交給ImageLoaderEngine(創建任務,並進行任務調度)分配到具體的線程池去完成,任務通過 Cache (本地緩存)及 ImageDownloader (從網絡獲取圖片)獲取圖片,中間可能經過 BitmapProcessor(圖片處理器) 和 ImageDecoder (圖片解碼)處理,最終轉換為Bitmap 交給 BitmapDisplayer 在 ImageAware 中顯示。
注:其中 Cache 分為 MemoryCache(內存緩存) 和 DiskCache(硬盤緩存) 兩部分。
:Processor 資源(圖片)處理器,負責處理資源,比如旋轉、壓縮、截取等。
二、Picasso介紹
>> picasso是Square公司開源的一個Android圖形緩存庫,可以實現圖片下載和緩存功能
Picasso不僅實現了圖片異步加載的功能,還解決了android中加載圖片時需要解決的一些常見問題:
1.在adapter中需要取消已經不在視野范圍的ImageView圖片資源的加載,否則會導致圖片錯位,Picasso已經解決了這個問題。
2.使用復雜的圖片壓縮轉換來盡可能的減少內存消耗
3.自帶內存和硬盤二級緩存功能
>>Picasso設計與流程設計
Picasso 收到加載及顯示圖片的任務,創建 Request 並將它交給 Dispatcher,Dispatcher 分發任務到具體 RequestHandler,任務通過 MemoryCache 及 Handler(數據獲取接口) 獲取圖片,圖片獲取成功后通過 PicassoDrawable 顯示到 Target 中。
注:Dispatcher 負責分發和處理 Action,包括提交、暫停、繼續、取消、網絡狀態變化、重試等等。
三、Glide簡介
Glide是一個高效、開源、 Android設備上的媒體管理框架,Glide具有獲取、解碼和展示視頻劇照、圖片、動畫等功能,它還有靈活的API,這些API使開發者能夠將Glide應用在幾乎任何網絡協議棧里。創建Glide的主要目的有兩個,一個是實現平滑的圖片列表滾動效果(滾動流暢),另一個是支持遠程圖片的獲取、大小調整和展示
>>特點
- GIF動畫的解碼:通過調用Glide.with(context).load(“圖片路徑“)方法,GIF動畫圖片可以自動顯示為動畫效果。如果想有更多的控制,還可以使用Glide.with(context).load(“圖片路徑“).asBitmap()方法加載靜態圖片,使用Glide.with(context).load(“圖片路徑“).asGif()方法加載動畫圖片
- 本地視頻劇照的解碼:通過調用Glide.with(context).load(“圖片路徑“)方法,Glide能夠支持Android設備中的所有視頻劇照的加載和展示
- 縮略圖的支持:為了減少在同一個view組件里同時加載多張圖片的時間,可以調用Glide.with(context).load(“圖片路徑“).thumbnail(“縮略比例“).into(“view組件“)方法加載一個縮略圖,還可以控制thumbnail()中的參數的大小,以控制顯示不同比例大小的縮略圖
- Activity生命周期的集成:當Activity暫停和重啟時,Glide能夠做到智能的暫停和重新開始請求,並且當Android設備的連接狀態變化時,所有失敗的請求能夠自動重新請求
- 轉碼的支持:Glide的toBytes() 和transcode() 兩個方法可以用來獲取、解碼和變換背景圖片,並且transcode() 方法還能夠改變圖片的樣式
- 動畫的支持:新增支持圖片的淡入淡出動畫效果(調用crossFade()方法)和查看動畫的屬性的功能
- OkHttp和Volley的支持:默認選擇HttpUrlConnection作為網絡協議棧,還可以選擇OkHttp和Volley作為網絡協議棧
- 其他功能:如在圖片加載過程中,使用Drawables對象作為占位符、圖片請求的優化、圖片的寬度和高度可重新設定、縮略圖和原圖的緩存等功能
-
<<Glide設計與流程
簡單的講就是 Glide 收到加載及顯示資源的任務,創建 Request 並將它交給RequestManager(任務管理器),Request 啟動 Engine(數據獲取引擎) 去數據源獲取資源(通過 Fetcher(數據獲取器) ),獲取到后 Transformation(圖片處理) 處理后交給 Target(目標)。