Android开发Android技术知识Android开发

Glide缓存机制

2023-11-10  本文已影响0人  奔跑吧李博
Glide加载资源流程

注意: ActiveResources + MemoryCache是内存缓存,都属于运行时缓存,且互斥(同一张图片不会同时缓存在ActiveResources+MemoryCache),应用被杀死后将不存在。

Glide 的缓存分层结构:

内存缓存在默认情况下,Glide自动开启内存缓存的,我们也可以通过调用skipMemoryCache(true) 方法,禁用内存缓存

RequestOptions options = new RequestOptions()  
        // 关闭内存缓存
        .skipMemoryCache(true);  

设置磁盘缓存模式:

diskCacheStrategy(DiskCacheStrategy.xxx)  //是否开启磁盘缓存 

可以设置4种模式:

DiskCacheStrategy.NONE:表示不缓存任何内容。
DiskCacheStrategy.SOURCE:表示只缓存原始图片。
DiskCacheStrategy.RESULT:表示只缓存转换过后的图片(默认选项)。
DiskCacheStrategy.ALL :表示既缓存原始图片,也缓存转换过后的图片。
Glide的缓存Key是什么

生成缓存Key的代码在Engine类的load()方法当中:

final String id = fetcher.getId();
EngineKey key = keyFactory.buildKey(id, signature, width, height, 
loadProvider.getCacheDecoder(),loadProvider.getSourceDecoder(), 
transformation, loadProvider.getEncoder(),transcoder, 
loadProvider.getSourceEncoder());

在源码里查看可以知道,每一次的load方法内部,都会有一个fetcher.getId()方法获得了一个id字符串,这个字符串也就是我们要加载的图片的唯一标识,比如说如果是一张网络上的图片的话,那么这个id就是这张图片的url地址。然后,这个id会结合signature、width、height等等10个参数一起传入到EngineKeyFactory的buildKey()方法当中,从而构建出了一个EngineKey对象,这个EngineKey也就是Glide中的缓存Key了。 因此,如果你图片的width或者height发生改变,也会生成一个完全不同的缓存Key。
(这里补充一下:4.4以前是Bitmap复用必须长宽相等才可以复用,而4.4及以后是Size>=所需就可以复用,只不过需要调用reconfigure来调整尺寸)

参考:
https://blog.csdn.net/Love667767/article/details/127601652
https://blog.csdn.net/yinianzhijian99/article/details/123128564
https://juejin.cn/post/7006126659984162847
https://juejin.cn/post/6844903763342262280

上一篇 下一篇

猜你喜欢

热点阅读