一、前瞻
在Android开发过程中用到缓存功能时,其内存、存储空间的大小一般都是有限的,当有新的元素插入进来并且使用的空间有限的时候,就需要淘汰旧的元素
二、LRU缓存
是一种缓存淘汰策略,全称 least recently used,意为最近最少使用
主要思想:如果一个数据最近被访问,则将来它仍有可能被访问。在达到某个阈值时,淘汰掉最近没有访问的数据,从而保证缓存的数据量不会过大
三、实现方式
- 使用链表来实现
- 有新数据加入,插入链头
- 如果缓存中用到,将取走的数据移至链头
- 链表满时将链尾数据丢弃
四、LruCache
图片缓存淘汰策略
- 通过构造函数来设置最大容量限制
- 通过 LinkedHashMap 来实现的数据的存放
- 通过get方法来读取缓存,通过 synchronized 对存在线程安全的代码块加了锁,保证了这里读取操作的线程安全
- 通过put方法写入缓存,将数据放入 Map 中,如果之前 key 的位置有数据则将当前 size 再减去原 size 从而计算出放入后的 size。
- 之后通过
trimToSize
方法进行空间重整,不断地在通过 remove 方法对 Map 中前面的元素进行删除,直到 size 小于 maxSize 为止,从而实现了空间的重整。
五、DiskLruCache
在磁盘上实现 LRU 存储的开源库