标签:它的 amp resid null err string table 开启 source
Android 中如何高效地加载 Bitmap 是一个很重要也很容易被我们忽视的问题。
decodeFile
、decodeResource
、decodeStream
、decodeByteArray
以及 decodeFileDescriptor
等几类方法来加载一个 Bitmap 对象。BitmapFactory.Options
的 inSampleSize
采样率属性来加载所需尺寸的图片。inSampleSize = 1 时加载原图,inSampleSize = 2 时加载的像素为原图的 1/4,以此类推。官方推荐设置 inSampleSize 的值为 2 的指数。
获取采样率的流程:
BitmapFactory.Options
的 inJustDecodeBounds
参数设为 true
并加载图片。BitmapFactory.Options
中取出图片的原始宽高信息,它们对应于 outWidth
和 outHeight
。inSampleSize
。将 BitmapFactory.Options
的 inJustDecodeBounds
参数设为 false
然后重新加载图片。
1 | public Bitmap (Resources res, |
LruCache 是一个泛型类,内部采用一个 LinkedHashMap<K, V>
以强引用的方式存储外界的缓存对象,提供了 get
和 put
等操作方法,当存储满时,会移除较早使用的缓存对象,再添加新的缓存对象。此外,LruCache 是线程安全的。
三种引用的区别:
- 强引用:直接的对象引用
- 软引用:当一个对象只有软引用存在时,系统内存不足时此对象会被 gc 回收
- 弱引用:当一个对象只有弱引用存在时,此对象会随时被 gc 回收
LruCache 典型示例代码:
1 | // 获取当前可用的最大内存 |
DiskLruCache 用于实现存储设备缓存,即磁盘缓存,它通过将缓存对象写入文件系统从而实现缓存的效果。项目地址:https://github.com/JakeWharton/DiskLruCache
DiskLruCache 的创建
1 | /** |
DiskLruCache 的缓存添加
1 | String key = hashKeyFormUrl(url); // url 转换下防止特殊字符影响 |
DiskLruCache 的缓存查找
1 | Bitmap bitmap = null; |
一个优秀的图片加载器应具备:
完整的 ImageLoader 示例可以参考源码
getView
中执行耗时操作。标签:它的 amp resid null err string table 开启 source
原文地址:https://www.cnblogs.com/petewell/p/11597445.html