標籤: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 魔法般的自訂擴充