尚学堂百战程序员之Glide缓存机制

尚学堂百战程序员之Glide缓存机制
2018年06月01日 09:47 独一无二的楠竹

——高级用法

结合前面的内存缓存和硬盘缓存,我们发现缓存的key是由传入的url决定的,而现实中我们的项目图片资源可能在url后面拼接上如token参数这些随时变化的参数,这样就会使我们的缓存失效来到Glide生成key的地方publicLoadStatus load(Key signature, int width, int height, DataFetcherfetcher,

DataLoadProvider

loadProvider, Transformation

transformation, ResourceTranscoder

transcoder,

Priority priority, boolean isMemoryCacheable, DiskCacheStrategy diskCacheStrategy, ResourceCallback cb) {

Util.assertMainThread();

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

HttpUrlFetcher的getId()@Overridepublic 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;}@Overridepublic 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);

后记:对于大部分转行的人来说,找机会把自己的基础知识补齐,边工作边补基础知识,真心很重要。

我们相信人人都可以成为一个IT大神,现在开始,选择一条阳光大道,助你入门,学习的路上不再迷茫。这里是北京尚学堂,初学者转行到IT行业的聚集地。"

财经自媒体联盟更多自媒体作者

新浪首页 语音播报 相关新闻 返回顶部