0
点赞
收藏
分享

微信扫一扫

Glide 图片库原理(三)缓存机制

缓存机制

查找缓存使用

  1. 先到活动缓存查找,如果有直接返回显示
  2. 如果活动缓存没有,那么去LRU内存缓存查找,如果有那么剪切到活动缓存,返回显示
  3. 如果LRU内存缓存没查到,到磁盘缓存查找,如果找到那么,放到活动缓存,返回显示
  4. 如果磁盘缓存没找到,那么去网络请求,放到磁盘缓存,然后放到活动缓存,加载返回显示。

用完移除

  1. Lefecycle 管理的生命周期,onDestroy,活动缓存(就是内存一个Map集合)释放之后,移动到LRU内存
  2. 磁盘缓存什么时候过期?LUR算法管理磁盘缓存机制

资源封装

源码中查看EngineKey-----相当于key,算法序列abcdsxxfaskldfjklf...
源码中查看Source-----相当于value(Bitmap),调用系统转换成Bitmap

DiskCacheStrategy

  • DiskCacheStrategy.NONE: 表示不缓存任何内容。
  • DiskCacheStrategy.RESOURCE: 在资源解码后将数据写入磁盘缓存,即经过缩放等转换后的图片资源。
  • DiskCacheStrategy.DATA: 在资源解码前将原始数据写入磁盘缓存。
  • DiskCacheStrategy.ALL : 使用DATA和RESOURCE缓存远程数据,仅使用RESOURCE来缓存本地数据。
  • DiskCacheStrategy.AUTOMATIC:它会尝试对本地和远程图片使用最佳的策略。当你加载远程数据(比如,从URL下载)时,AUTOMATIC 策略仅会存储未被你的加载过程修改过(比如,变换,裁剪–译者注)的原始数据,因为下载远程数据相比调整磁盘上已经存在的数据要昂贵得多。对于本地数据,AUTOMATIC 策略则会仅存储变换过的缩略图,因为即使你需要再次生成另一个尺寸或类型的图片,取回原始数据也很容易。默认使用这种缓存策略
  • 通过RequestOptions的.diskCacheStrategy(参数)方法设置。
业务场景
  1. 降低缓存图片的质量,减少内存消耗

情景: 相册类的App经常需要同时展示大量的图片,这种情况下图片的质量可以低一点,因为加载速度优先于图片的质量。

解决办法: 我们可以设置译码的格式,在RequestOptions中加入.encodeFormat(Bitmap.CompressFormat.WEBP).encodeQuality(10))的选项,①encodeFormat的参数有Bitmap.CompressFormat.PNG,Bitmap.CompressFormat.JPEG,Bitmap.CompressFormat.WEBP(质量从高到低);②encodeQuality设置的是0-100的int类型,一个质量百分比参数,越小质量越低。

情景: 大体的意思应该是同一个URL在不同的时间可能会指向不同的资源,所以同样需要实时更新。

解决办法相同

  1. 头像没有及时更新的问题 && URL重定向

情景: 开发一款有头像的APP,我们修改了头像并且更新到了服务端,可是当我们点击查看大图时加载出来的还是原来的头像。

解决办法: 这是Glide强大的缓存带来的副作用,我们可以在RequestOptions中加入.diskCacheStrategy(DiskCacheStrategy.NONE).skipMemoryCache(true)的选项。那么缓存的功能就会全部关闭,从而使得每次都是从服务端加载,所以头像会是最新。

  1. 省流量模式

情景: 省流量模式的应用情景就是减少不必要图片的加载。

解决办法: 我们可以在RequestOptions中加入onlyRetrieveFromCache(true)的选项。那么图片就只会从缓存中读取,如果没有缓存则不加载图片,从而达到减少流量消耗的目的。

举报

相关推荐

0 条评论