二级缓存:
说下需要显示一张图片所经历的逻辑,你就一清二楚了:
需要显示图片 ——>
查内存(有的话显示) —没有—>
查磁盘(有的话显示) —没有—
>
从网络加载
(显示出来) ——>
往内存中存一份
——>
往磁盘存一份
从上我们知道,缓存有两种,内存缓存和磁盘缓存(SD卡/机身存储):
内存缓存:一级缓存,优先从这里拿,缓存文件存储在data/data/包名/cache目录下
以前写内存缓存的老旧套路是用Map弱引用的Bitmap对象,而Google老东家并不建议
这样做,官方最佳实践中给我们推荐了关于缓存的两个API: LruCache(内存缓存)
和 DiskLruCache(磁盘缓存) LruCache是以强引用(直接引用)的方式引用外界的缓存对
象的,不会被GC回收, 而SoftReference引用,当系统内存不足的时候回随GC回收 还
有个WeakRefreence,随时都可能会被系统回收... 如果你对这个很有兴趣,可移步到
官方的最佳实践:Caching Bitmaps
磁盘缓存: