1. 程式人生 > >Android 四大圖片快取原理,特性對比

Android 四大圖片快取原理,特性對比

4大圖片框架

Universal ImageLoader 是很早開源的圖片快取,在早期被很多應用使用。
Picasso 是 Square 開源的專案,且他的主導者是 JakeWharton,所以廣為人知。
Glide 是 Google 員工的開源專案,被一些 Google App 使用,在去年的 Google I/O 上被推薦,不過目前國內資料不多。
Fresco 是 Facebook 在今年上半年開源的圖片快取,主要特點包括:
(1) 兩個記憶體快取加上 Native 快取構成了三級快取
(2) 支援流式,可以類似網頁上模糊漸進式顯示圖片
(3) 對多幀動畫圖片支援更好,如 Gif、WebP
鑑於 Fresco 還沒釋出正式的 1.0 版本,同時一直沒太多時間熟悉 Fresco 原始碼,後面對比不包括 Fresco,以後有時間再加入對比。

(1) RequestManager:請求生成和管理模組
(2) Engine:引擎部分,負責建立任務(獲取資料),並排程執行
(3) GetDataInterface:資料獲取介面,負責從各個資料來源獲取資料。
比如 MemoryCache 從記憶體快取獲取資料、DiskCache 從本地快取獲取資料,下載器從網路獲取資料等。
(4) Displayer:資源(圖片)顯示器,用於顯示或操作資源。
比如 ImageView,這幾個圖片快取都不僅僅支援 ImageView,同時支援其他 View 以及虛擬的 Displayer 概念。
(5) Processor 資源(圖片)處理器
負責處理資源,比如旋轉、壓縮、擷取等。
以上概念的稱呼在不同圖片快取中可能不同,比如 Displayer 在 ImageLoader 中叫做 ImageAware,在 Picasso 和 Glide 中叫做 Target。

  1. 使用簡單
    都可以通過一句程式碼可實現圖片獲取和顯示。
  2. 可配置度高,自適應程度高
    圖片快取的下載器(重試機制)、解碼器、顯示器、處理器、記憶體快取、本地快取、執行緒池、快取演算法等大都可輕鬆配置。
    自適應程度高,根據系統性能初始化快取配置、系統資訊變更後動態調整策略。
    比如根據 CPU 核數確定最大併發數,根據可用記憶體確定記憶體快取大小,網路狀態變化時調整最大併發數等。
  3. 多級快取
    都至少有兩級快取、提高圖片載入速度。
  4. 支援多種資料來源
    支援多種資料來源,網路、本地、資源、Assets 等
  5. 支援多種 Displayer
    不僅僅支援 ImageView,同時支援其他 View 以及虛擬的 Displayer 概念。
    其他小的共同點包括支援動畫、支援 transform 處理、獲取 EXIF 資訊等。