Android Glide数据更新及内存缓存、硬盘缓存清理

Glide的缓存机制虽然提升了性能,但是如果针对固定资源路径的请求,将导致请求得到的资源是缓存的,这样就不能保证最新。换句话说,如果给定资源地址下的资源的频繁更新的,而资源地址是固定,则Glide此时的缓存策略就显得不太合适。

导致这种问题的原因有二:
一, Glide本身使用了缓存。
二, Glide在缓存资源使用<K,V>键值对模型,如果每次都使用http://xxx.xxx.jpg这个URL,那么键相同,意味着Glide匹配键时候,永远可以从缓存中返回键对应的值。

针对这个问题的解决方案:

解决方案1:

从Glide提供的缓存键值对<K,V>结构模型入手,重写缓存的<K,V>键值策略,就可以避免相同资源地址下资源更新问题了,但是这种方案实现比较复杂,也无十分必要。不推荐,除非必需。

解决方案2:

Glide.get(this).clearMemory();
清理内存中的缓存。

Glide.get(this).clearDiskCache();
清理硬盘中的缓存。


以上两个方法清除全局的内存缓存和硬盘缓存,虽然可以一劳永逸的解决缓存导致的资源陈旧问题,但是将严重影响全局性能,所以慎用,除非是在APP整体要做全新的开始或者恢复原始状态,否则尽量避免使用。

解决方案3:
ImageView image= (ImageView) findViewById(R.id.image);
Glide.with(this).load("http://avatar.csdn.net/9/7/A/1_zhangphil.jpg")
.skipMemoryCache(true)   //跳过内存缓存
.diskCacheStrategy(DiskCacheStrategy.NONE)   //不缓冲disk硬盘中
.into(image);

关键代码:skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.NONE)
skipMemoryCache(true) ,跳过内存缓存。
diskCacheStrategy(DiskCacheStrategy.NONE) ,不要在disk硬盘中缓存。

这两个函数同时联合使用,使得Glide针对这一次的资源加载放弃内存缓存和硬盘缓存,相当于一次全新的请求。这样就迫使Glide从给定的资源地址发起全新的数据加载,而非从旧有的缓存中取缓存使用。

参考:
Android Glide数据更新及内存缓存、硬盘缓存清理

Android图片加载与缓存开源框架:Android Glide》

《Android Glide加载图片时转换为圆形、圆角、毛玻璃等图片效果》

https://blog.csdn.net/adminlxb89/article/details/90026015

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值