为解决glide版本默认的缓存机制,在图片中带token信息时,每次都会再重新加载,浪费流量,提供一种解决方案,使图片加载时不再每次请求新链接
1.依赖版本为4.9,配置如下
implementation 'com.github.bumptech.glide:glide:4.9.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
2.调用方法
1)使用缓存配置
private static RequestOptions requestOptions = new RequestOptions()
.onlyRetrieveFromCache(true)//是否只用缓存
.skipMemoryCache(true)//是否跳过缓存
.diskCacheStrategy(DiskCacheStrategy.ALL);
2)定义GlideUrl类,用于自定义缓存的key ,将原始链接替换为去除token之后的链接,这样在图片token更新的时候,缓存还可以取到
public static class TokenGlideUrl extends GlideUrl {
private String mUrl;
public TokenGlideUrl(String url) {
super(url);
mUrl = url;
}
@Override
public String getCacheKey() {
return getUrlWithoutToken(mUrl);
}
/**
* 截取url之外的验证信息
* <p>
* http://172.20.5.155/group1/M00/4B/B4/rBQFm105Y_OAFHLcAADW2awNcbs863.png?ts=1568709232&token=3f73e9ae2754113b48ce779dbf4ad37d
* <p>
* http://172.20.5.155/group1/M00/4B/B4/rBQFm105Y_OAFHLcAADW2awNcbs863.png
*
* @return
*/
private String getUrlWithoutToken(String url) {
String tokenUrl = url;
if (TextUtils.isEmpty(tokenUrl)) {
return tokenUrl;
}
String[] split = url.split("\\?");
if (split.length > 1) {
tokenUrl = split[0];
}
return tokenUrl;
}
}
3)调用
来个简单的方法来调用
/**
* 加载图片
*
* @param context
* @param url
* @param im
*/
public static void loadImg(Context context, String url, ImageView im) {
Glide.with(context)
.applyDefaultRequestOptions(requestOptions)
.load(new TokenGlideUrl(url))
.into(im);
}
当然别忘记配置混淆了
# Glide
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
**[] $VALUES;
public *;
}