我是靠谱客的博主 长情秋天,最近开发中收集的这篇文章主要介绍Glide缓存机制之高级用法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Glide缓存机制:高级用法


结合前面的内存缓存和硬盘缓存,我们发现缓存的key是由传入的url决定的,而现实中我们的项目图片资源可能在url
后面拼接上如token参数这些随时变化的参数,这样就会使我们的缓存失效

来到Glide生成key的地方

public <T, Z, R> LoadStatus load(Key signature, int width, int height, DataFetcher<T> fetcher,
            DataLoadProvider<T, Z> loadProvider, Transformation<Z> transformation, ResourceTranscoder<Z, R> transcoder,
            Priority priority, boolean isMemoryCacheable, DiskCacheStrategy diskCacheStrategy, ResourceCallback cb) {
        Util.assertMainThread();
        long startTime = LogTime.getLogTime();

这里的fetcher其实就是HttpUrlFetcher
        final String id = fetcher.getId();
        EngineKey key = keyFactory.buildKey(id, signature, width, height, loadProvider.getCacheDecoder(),
                loadProvider.getSourceDecoder(), transformation, loadProvider.getEncoder(),
                transcoder, loadProvider.getSourceEncoder());
}

HttpUrlFetcher的getId()
@Override
    public String getId() {
        return glideUrl.getCacheKey();
    }

public String getCacheKey() {
      return stringUrl != null ? stringUrl : url.toString();
    }

发现id就是url(如果是string类型的就是本身,如果是Url对象就是url.toString())

所以我们的解决办法就是创建一个MyGlideUrl继承自Glide的GlideUrl重写getCacheKey()
public class MyGlideUrl extends GlideUrl {


private String mUrl;
public MyGlideUrl(String url) {
super(url);
this.mUrl = url;
}


@Override
public String getCacheKey() {
return mUrl.replace(tokenParam(), "");
}


private String tokenParam() {
String param = "";
int tokonIndex = mUrl.indexOf("?token=") >= 0 ? mUrl.indexOf("?token=") : mUrl.indexOf("&token=");
if (tokonIndex != -1) {
int nextIndex = mUrl.indexOf("&", tokonIndex + 1);
if (nextIndex != -1) {
   param = mUrl.substring(tokonIndex + 1, nextIndex + 1);
} else {
param = mUrl.substring(tokonIndex);
}
}


return param;
}
}

activity中引用:
Glide.with(this).load(new MyGlideUrl(url)).into(imageView);

最后

以上就是长情秋天为你收集整理的Glide缓存机制之高级用法的全部内容,希望文章能够帮你解决Glide缓存机制之高级用法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部