android开发杂识Android面试问题专题分享天花板谈Android开发

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

2017-07-12  本文已影响558人  小怪兽打葫芦娃

Android程序员面试宝典

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

参考图示:

网络缓存:
通过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

阅读原文

上一篇下一篇

猜你喜欢

热点阅读