8.4.3 Glide

和Picasso有90%類似度,但卻比Picasso省內存,有助於APP的優化!html

Glide 的使用介紹

Android Glide Google 推薦加載圖片框架(加載圖片詳解篇)android

1). 導入庫

dependencies { 
    compile 'com.github.bumptech.glide:glide:3.5.2' 
    compile 'com.android.support:support-v4:22.0.0' 
}  // Glide須要依賴Support Library v4,別忘了。其實Support Library v4已是應用程序的標配了。

 

2). 基礎加載

Glide.with(context) .load("http://inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg").into(ivImg); 

  Glide的with方法不光接受Context,還接受Activity 和 Fragment,Context會自動的從他們獲取。git

  同時將Activity/Fragment做爲with()參數的好處是:圖片加載會和Activity/Fragment的生命週期保持一致,好比Paused狀態在暫停加載,在Resumed的時候又自動從新加載。因此我建議傳參的時候傳遞Activity 和 Fragment給Glide,而不是Context。github

  Glide默認的Bitmap格式是RGB_565 ,比ARGB_8888格式的內存開銷要小一半。若是你對默認的RGB_565效果以爲難以接受,能夠建立一個新的GlideModule將Bitmap格式轉換到ARGB_8888:緩存

public class GlideConfiguration implements GlideModule {  
    @Override  
    public void applyOptions(Context context, GlideBuilder builder) {  
        builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);  
    }  
    @Override  
    public void registerComponents(Context context, Glide glide) {  
        // register ModelLoaders here.  
    }  
}  

同時在AndroidManifest.xml中將GlideModule定義爲meta-dataapp

<meta-data android:name="com.inthecheesefactory.lab.glidepicasso.GlideConfiguration"  android:value="GlideModule"/>

 

3). Glid設計及優勢

  整個庫分爲 RequestManager(請求管理器),Engine(數據獲取引擎),Fetcher(數據獲取器),MemoryCache(內存緩存)、DiskLRUCache,Transformation(圖片處理),Encoder(本地緩存存儲),Registry(圖片類型及解析器配置),Target(目標) 等模塊。框架

  Glide 收到加載及顯示資源的任務,建立 Request 並將它交給RequestManager,Request 啓動 Engine 去數據源獲取資源(經過 Fetcher ),獲取到後 Transformation 處理後交給 Target。ide

  ·Glide 依賴於 DiskLRUCache、GifDecoder 等開源庫去完成本地緩存和 Gif 圖片解碼工做。post

Glide 優勢優化

(1) 圖片緩存->媒體緩存

  Glide 不只是一個圖片緩存,它支持 Gif、WebP、縮略圖。甚至是 Video,因此更該當作一個媒體緩存。

(2) 支持優先級處理

(3) Activity/Fragment 生命週期一致,支持 trimMemory

  Glide 對每一個 context 都保持一個 RequestManager,經過 FragmentTransaction 保持與 Activity/Fragment 生命週期一致,而且有對應的 trimMemory 接口實現可供調用。

(4) 支持 okhttpVolley

  Glide 默認經過 UrlConnection 獲取數據,能夠配合 okhttp 或是 Volley 使用。實際 ImageLoader、Picasso 也都支持 okhttp、Volley。

(5) 內存友好

① Glide 的內存緩存有個 active 的設計

從內存緩存中取數據時,不像通常的實現用 get,而是用 remove,再將這個緩存數據放到一個 value 爲軟引用的 activeResources map 中,並計數引用數,在圖片加載完成後進行判斷,若是引用計數爲空則回收掉。

② 內存緩存更小圖片:Glide 以 url、view_width、view_height、屏幕的分辨率等作爲聯合 key,將處理後的圖片緩存在內存緩存中,而不是原始圖片以節省大小

③ 與 Activity/Fragment 生命週期一致,支持 trimMemory

④ 圖片默認使用默認 RGB_565 而不是 ARGB_888雖然清晰度差些,但圖片更小,也可配置到 ARGB_888。

其餘:Glide 能夠經過 signature 或不使用本地緩存支持 url 過時

相關文章
相關標籤/搜索