一、普通的三级缓存
内存缓存,优先加载,速度最快
本地缓存,次优先加载,速度快
网络缓存,最后加载,速度慢,浪费流量
二、三级缓存范围:
活动缓存:在某个Activity范围,页面退出该缓存就不存在
内存缓存:某个App范围,应用完全退出就不存在
磁盘缓存:整个系统,只要不删除数据,就一直存在
三、三级缓存的作用:
活动缓存:分担内存缓存的负担,
内存缓存:加快数据读取
磁盘缓存:进行永久性保持
四、Glide三级缓存的使用
1、优先从活动缓存获取
2、活动缓存没有就再内存缓存中寻找
3、内存缓存没有,就去磁盘缓存读取
4、磁盘缓存没有就去网络获取本地文件读取
五、Glide的缓存使用
1、内存缓存:
Glide.with(this)
.load(url)
.skipMemoryCache(true)//关闭内存缓存
.into(imageView);
2、磁盘缓存:
Glide.with(this)
.load(url)
.diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
.into(imageView);
一个 diskCacheStrategy( ) 方法就可以调整他的硬盘缓存策略。其中可以传入的参数有四种:
DiskCacheStrategy.ALL : 表示既缓存原始图片,也缓存转换过后的图片。
DiskCacheStrategy.NONE: 表示不缓存任何内容。
DiskCacheStrategy.RESOURCE: 表示只缓存原始图片。
DiskCacheStrategy.RESULT: (已过期,新api4.11修改为后面两个)表示只缓存转换过后的图片(默认选项)。
DiskCacheStrategy.DATA: 表示只缓存转换过后的图片。
DiskCacheStrategy.AUTOMATIC 表示智能判断选择模式(默认选项)。
六、Glide关联生命周期:
Glide进行的网络请求可以和当前页面(Activity或者Fragment)生命周期绑定在一起,当在某一个页面中开始请求网络图片时,假设此时突然按了退出键,那么Glide能监听到这个页面(Activity或者Fragment)的onStop方法,它会将当前所有正在进行但是尚未完成的Request请求暂停掉;同样道理,当页面再次回到前台时,它可以监听到页面的onStart方法,然后将所有当前尚未完成的,没有被取消的并且当前不是请求状态中的Request启动起来开始请求。
四级缓存:
活动缓存:优先从活动缓存中查找资源,如果找到直接返回资源。当活动缓存中的资源释放时,将资源放入内存缓存。使用Map缓存资源
内存缓存:当活动缓存中找不到可用资源,从内存缓存中查找,同时将内存缓存中的资源放入活动缓存,并从内存缓存中移除资源。使用LruCache算法进行资源保存。
磁盘缓存:当内存缓存中也找不到可用资源,则从磁盘缓存中查找。同时将资源放入活动缓存。
网络缓存:当磁盘缓存中也找不到时,就从网络加载,并将请求返回的资源存入磁盘缓存中。
Glide最为一个优秀的图片加载框架使用了四级缓存来加载图片。分别为ActiveResources 活动缓存,MemoryCache 内存缓冲,DiskCache 磁盘缓存,Http 网络缓存。如下图所示。
Glide中的LruCache:
LruCache是一个基于LinkedHashMap的简单的内存缓存类,它根据最近使用的次序保存数据。当缓存达到最大容量时,最近最少使用的数据项会被移除。
在Glide中,LruCache的使用方式如下:
-
首先,通过调用Glide的
getLruCache()
方法获取LruCache实例。 -
然后,将需要缓存的图片以键值对的形式存储到LruCache中。
-
可以通过调用
put()
方法来添加或更新图片缓存。 -
可以通过调用
get()
方法来获取图片缓存。
Glide加载策略
- DiskCacheStrategy.NONE:不缓存文件。
- DiskCacheStrategy.SOURCE:只缓存原图。
- DiskCacheStrategy.RESULT:只缓存最终加载的图(默认的缓存策略)。
- DiskCacheStrategy.ALL:同时缓存原图和结果图。