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緩存遠程數(shù)據葫慎,僅使用RESOURCE來緩存本地數(shù)據。
DiskCacheStrategy.NONE 不使用磁盤緩存
DiskCacheStrategy.DATA 在資源解碼前就將原始數(shù)據寫入磁盤緩存
DiskCacheStrategy.RESOURCE 在資源解碼后將數(shù)據寫入磁盤緩存纽窟,即經過縮放等轉換后的圖片資源。
DiskCacheStrategy.AUTOMATIC 根據原始圖片數(shù)據和資源編碼策略來自動選擇磁盤緩存策略兼吓。*/
緩存清理
//磁盤緩存清理(子線程)
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();
}
}