面试题-加载图片的三级缓存原理

Android程序员面试宝典

原理:
当Android端需要获得数据时比如获取网络中的图片,我们首先从内存中查找(按键查找),内存中没有的再从磁盘文件或sqlite中去查找,若磁盘中也没有才通过网络获取

参考图示:

面试题-加载图片的三级缓存原理_第1张图片

网络缓存:
通过Cache-Control的设置进行网络缓存

内存缓存:
内存缓存我们采用了LruCache

LruCache是android提供的一个缓存工具类,其算法是最近最少使用算法。
它把最近使用的对象用“强引用”存储在LinkedHashMap中,并且把最近最少使用的对象在缓存值达到预设定值之前就从内存中移除

LruCache:底层实现原理:

LruCache中Lru算法的实现就是通过LinkedHashMap来实现的。LinkedHashMap继承于HashMap,它使用了一个双向链表来存储Map中的Entry顺序关系,
对于get、put、remove等操作,LinkedHashMap除了要做HashMap做的事情,还做些调整Entry顺序链表的工作。
LruCache中将LinkedHashMap的顺序设置为LRU顺序来实现LRU缓存,每次调用get(也就是从内存缓存中取图片),则将该对象移到链表的尾端。
调用put插入新的对象也是存储在链表尾端,这样当内存缓存达到设定的最大值时,将链表头部的对象(近期最少用到的)移除。

磁盘缓存
使用的是DiskLruCache

阅读原文

你可能感兴趣的:(面试题-加载图片的三级缓存原理)