关键词:Bitmap / Cache / 图片加载 / 采样率 / ImageLoader /
本次笔记梳理的内容是 Bitmap 的加载和 Cache。加载 Bitmap 需要注意的问题有防止内存溢出、如何高效地加载 Bitmap 等等,对于常用的缓存策略,实际开发中,我们需要用 Bitmap 做缓存,通过缓存我们不需要每次都从网络上请求图片或者从存储设备中加载图片,极大提高图片的加载效率以及用户体验。 目前常用的缓存策略有:LruCache 和 DiskLruCache,分别对应着 内存缓存 和 存储缓存,最近最少使用算法:当缓存快满的时候,淘汰近期最少使用的缓存目标;
关于 LruCache 需要知道的几点:
是一个泛型类,内部采用了一个 LinkedHashMap 以强引用的方式存储外界的缓存对象,其提供了 get 和 put 方法来完成缓存的获取和添加操作,当缓存满的时候,LruCache 会移除较早使用的缓存对象,然后再添加新的缓存对象;LruCache 是线程安全的;LruCache 是 Android 的源码的一部分了;
强引用:直接的对象引用;软引用:当一个对象只有软引用存在的时候,系统内存不足时此对象会被 gc 回收;弱引用:当一个对象只有弱引用的时候,此对象会随时被 gc 回收;关于 DiskLruCache 需要知道的几点:
DiskLruCache 用于实现存储设备缓存,即磁盘缓存;DiskLruCache 通过将缓存对象写入文件系统从而实现缓存的效果;DiskLruCache 不属于 Android SDK 的一部分;DiskLruCache 提供了 open 方法用于创建自身;DiskLruCache 的缓存添加的操作是通过 Editor 完成的,Editor 表示一个缓存对象的编辑对象;可以通过 edit() 来获取 Editor 对象;如果这个缓存正在被编辑,那么 edit() 会返回 null,即 DiskLruCache 不允许同时编辑一个缓存对象;一个优秀的 ImageLoader 应该具有的功能:
图片的同步加载图片的异步加载图片压缩内存缓存磁盘缓存网络拉取其中内存缓存和磁盘缓存是 ImageLoader 的核心,也是 ImageLoader 的意义所在,这两级缓存极大提高了程序的效率并且有效地降低了对用户所造成的流量消耗,只有当这两级缓存都不可用的时候才会尝试从网络中拉取图片。
End.
Note by HF. Learn from 《Android 开发艺术探索》
新闻热点
疑难解答