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();
}
}