Glide 魔法般的自訂擴充

來源:互聯網
上載者:User

標籤:lru   path   map   生命週期   roi   source   one   default   rect   

      使用過Glide的朋友都明白,簡單的用法就是:

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

      而Picasso看起來像是Glide的“兄弟”一樣,但Glide的with中提供了多種傳遞形式,如activity和Fragment,這樣設計的目無非是想跟隨宿主的生命週期來做事兒。

而且從夾在圖片的參數上看預設載入為RGB_565圖片,從尋找的資料顯示RGB_565與ARGB_8888圖片相比,在比較普通的手機上肉眼似乎不能區分。

自然RGB_565品質相比較差,運行時佔據的記憶體也是差了不少,這可就是我們的重點啦,有效減緩了oom機會!如果你仍要使用高品質的圖片,那麼Glide確實提供了GlideModule方式自訂設定,

在資訊清單檔application中插入meat-data即可:

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

 重寫GlideModule:

 @Override    public void applyOptions(Context context, GlideBuilder builder) {//既然拿到了GlideBuilder我們就應該可以做很多事兒啦! 
//DecodeFormat.PREFER_ARGB_8888 //DecodeFormat.PREFER_RGB_565  builder.setDecodeFormat(。。。); } @Override public void registerComponents(Context context, Glide glide) { }

 沒錯既然重寫了GlideModule,並且拿到了GlideBuilder,如果到此為止的話那自訂的Glide就顯得太過於Low啦!

除了上面代碼中設定了圖片的品質參數外,重頭戲就在於這兩個方法:

builder.setMemoryCache( new LruResourceCache( customMemoryCacheSize );builder.setBitmapPool( new LruBitmapPool( customBitmapPoolSize );//關於Lru可以自己瞭解

 現在可以望文生義,就是用來設定Glide要佔用RAM的一個緩衝閥值額度。

 方式可選如下:

 1)完全自訂標準

 int maxMemory = (int) Runtime.getRuntime().maxMemory();//擷取系統分配給應用的總記憶體大小 int memoryCacheSize = maxMemory / 6;//設定圖片記憶體緩衝佔用整個app的比例

 2)按照Glide預設標準,可以自己在做調整

MemorySizeCalculator calculator = new MemorySizeCalculator(context);int defaultMSize = calculator.getMemoryCacheSize();  int defaultBPoolSize = calculator.getBitmapPoolSize();

 在持久化緩衝方面Glide也是提供了相當ok的api:

builder.setDiskCache(new InternalCacheDiskCacheFactory(context,xxxxxx));    //使用內部儲存和外部儲存做緩衝時只能二選一builder.setDiskCache(new ExternalCacheDiskCacheFactory(context,xxxxxx));    

 而且也可以使用DiskLruCacheFactory制定外部路徑:

builder.setDiskCache(new DiskLruCacheFactory( Environment.getDownloadCacheDirectory().getPath(), xxxxx));

 如果確定這麼做對你有用,那就試試吧!

Glide 魔法般的自訂擴充

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.