图片的三级缓存包括内存缓存,磁盘缓存,网络缓存。
为什么要缓存大家都知道,但如何进行缓存呢,缓存原理是什么呢?每次面试的时候都回答的不是太理想。今天又碰壁了。
所以我想好好的组织一下语言
内存缓存的原理是使用的LruCache算法,其中Lru是指(least recently used)即最近最少使用。当内存不足时就会对其进行回收
用法:
int maxMemory = (int) Runtime.getRuntime().maxMemory() /1024;//当前进程的最大内存
int cacheMemory = maxMemory /8;//分配给内存缓存的内存,如果存储的数据大小将要超过这个内存缓存,就回收掉一些最近很少使用的对象
通过查看源码,知道LruCache是基于LinkedHashMap,它是一个双向链表结构,
在LinmedHashMap创建的时候可指定顺序,一种是Lru,还有一种是插入顺序。在lruCache中用的是前一种。每次put一个entry或者get一个对象,都会把当前对象移到链表的尾端。当内存不足时,对链表的头部进行remove。