Gllide緩存配置
阿新 • • 發佈:2019-01-22
run 內存緩存 ret clear ble 圖片資源 線程 nag 通過 Glide依賴
//這裏用的是Android Studio3.0
implementation ‘com.github.bumptech.glide:glide:4.3.1‘
annotationProcessor(‘com.github.bumptech.glide:compiler:4.3.1‘)
implementation ‘com.github.bumptech.glide:okhttp3-integration:4.3.1‘
Glide本身自帶緩存,可以通過繼承AppGlideModule自定義一些配置
@GlideModule public final class CustomGlideModule extends AppGlideModule { @Override public void applyOptions(Context context, GlideBuilder builder) { // 設置緩存大小為20mb int memoryCacheSizeBytes = 1024 * 1024 * 20; // 20mb // 設置內存緩存大小 builder.setMemoryCache(new LruResourceCache(memoryCacheSizeBytes)); // 根據SD卡是否可用選擇是在內部緩存還是SD卡緩存 if(SDCardUtils.isSDCardEnable()){ builder.setDiskCache(new ExternalPreferredCacheDiskCacheFactory(context, "HYManagerImages", memoryCacheSizeBytes)); }else { builder.setDiskCache(new InternalCacheDiskCacheFactory(context, "HYManagerImages", memoryCacheSizeBytes)); } } // 針對V4用戶可以提升速度 @Override public boolean isManifestParsingEnabled() { return false; } }
Glide跳過內存緩存
GlideApp.with(context)
.load(url)
.skipMemoryCache(true)//默認為false
.dontAnimate()
.centerCrop()
.into(imageView);
Glide磁盤緩存
GlideApp.with(context) .load(url) .diskCacheStrategy(DiskCacheStrategy.ALL) .dontAnimate() .centerCrop() .into(imageView); /*默認的策略是DiskCacheStrategy.AUTOMATIC DiskCacheStrategy有五個常量: DiskCacheStrategy.ALL 使用DATA和RESOURCE緩存遠程數據,僅使用RESOURCE來緩存本地數據。 DiskCacheStrategy.NONE 不使用磁盤緩存 DiskCacheStrategy.DATA 在資源解碼前就將原始數據寫入磁盤緩存 DiskCacheStrategy.RESOURCE 在資源解碼後將數據寫入磁盤緩存,即經過縮放等轉換後的圖片資源。 DiskCacheStrategy.AUTOMATIC 根據原始圖片數據和資源編碼策略來自動選擇磁盤緩存策略。*/
緩存清理
//磁盤緩存清理(子線程)
GlideApp.get(context).clearDiskCache();
//內存緩存清理(主線程)
GlideApp.get(context).clearMemory();
遇到的問題:在配置完CustomGlideModule之後找不到GlideApp類
解決辦法:Build–>Rebuild Project
根據需求封裝了一個簡單的Glide工具類
?
public class GlideUtils { public static void initImageWithFileCache(Context context, String url, ImageView imageView){ GlideApp.with(context) .load(url) .diskCacheStrategy(DiskCacheStrategy.ALL) .dontAnimate() .centerCrop() .into(imageView); } public static void initImageNoCache(Context context, String url, ImageView imageView){ GlideApp.with(context) .load(url) .skipMemoryCache(true) .dontAnimate() .centerCrop() .into(imageView); } public static void clearMemoryCache(Context context){ GlideApp.get(context).clearMemory(); } public static void clearFileCache(Context context){ new Thread(new Runnable() { @Override public void run() { GlideApp.get(context).clearDiskCache(); } }).start(); } }
?
Gllide緩存配置