①分级缓存,著名的LruCache算法,又称为近期最少使用算法。
LruCache 中 Lru 算法的实现就是通过 LinkedHashMap 来实现的。LinkedHashMap继承于HashMap,
它使用了一个双向链表来存储 Map 中的 Entry 顺序关系,对于 get、put、remove 等操作,
LinkedHashMap 除了要做 HashMap 做的事情,还做些调整 Entry 顺序链表的工作。
LruCache 中将 LinkedHashMap 的顺序设置为 LRU 顺序来实现 LRU 缓存,
每次调用 get(也就是从内存缓存中取图片),则将该对象移到链表的尾端。
调用 put 插入新的对象也是存储在链表尾端,这样当内存缓存达到设定的最大值时,将链表头部的对象(近期最少用到的)移除。
②如果缓存中没有,那就去持久化的层级去找。
我们可以将图片资源放在文件夹里,当缓存中没有就在这些持久化的地方找。
③如果上面2步都找不到,那就是需要从服务器下载
下载后持久化保存在手机里。
④需要显示图片时,因为图片的实际大小与控件的大小有可能相差很大,例如一张高清图放在了一个很小的控件里,这时候就需要对图片进行压缩降低分辨率,生成一张尺寸较小的图片并持久化起来。
⑤根据view的大小范围,加载不同尺寸的图片,减少消耗。
例如:
view:50X50 - 200X200 图片:photoId_100_100
view:200X200 - 500X500 图片:photoId_500——500
view:500X500 - 全屏 图片:原尺寸
⑥考虑多线程问题,下载需要在子线程下载
网友评论