您的位置:首页 > 移动开发 > Android开发

第十二章 、Bitmap的加载和Cache

2016-04-21 08:48 417 查看

第十二章 、Bitmap的加载和Cache

目前常用的缓存策略是LruCache和DiskLruCache,其中LruCache常被用作内存缓存,而DiskLruCache常被用作存储缓存。

Lru是Least Recently Used的缩写,即最近最少使用算法。

1. Bitmap的高效加载

BtimapFactory提供了四种加载方法

decodeFile 文件系统

decodeResource 资源

decodeStream 输入流

decodeByteArray 字节数组

如何高效加载Bitmap?

核心思想就是,采用BitmapFactoryOptions来加载所需尺寸的图片,通过BitmapFactory.Options就可以按照一定的采样率来加载缩小后的图片,将缩小后的图片在ImageView中显示,这样就会降低内存占用从而在一定程度上避免OOM,提高了Bitmap加载时的性能。

如何获取采样率?

将BitmapFactory.Options的inJustDecodeBounds参数设为true并加载图片。

从BitmapFactory.Options中获取原始宽高信息。它们对应于outWidth和outHeight。

根据采样率的规则并结合目标View的大小计算采样率inSampleSize。

将BitmapFactory.Options的inJustDecodeBound参数设为false。然后重新加载图片。

inJustDecodeBounds参数,当参数设为true时,BitmapFactory只会解析图片的原始宽/高信息,并不会去真正地加载图片,所以这个操作时轻量级的。另外需要注意的是,这个时候BitmapFactory获取的图片宽高信息和图片的位置以及程序运行的设备有关。

2. Android中的缓存策略

为了提高用于体验,当应用打算从网络上请求一张图片时,程序首先从内存中去获取,如果内存中没有那就从存储设备中去获取,如果存储设备中也没有,那就从网络上下载这张图片。

目前常用的一张缓存算法是LRU,最近最少使用算法。核心思想是淘汰那些近期最少使用的缓存对象。

4/20/2016 5:35:26 PM 4/20/2016 5:35:27 PM

强引用:直接的对象引用。

软引用:当一个对象只有软引用时,系统内存不足时此对象会被gc回收

弱引用:当一个对象只有弱引用时,此对象会随时被gc回收。

2.1 DiskLruCache

DiskLruCache用于实现存储设备存储。

DiskLruCache 的创建

通过open方法用于创建自身:

public static DiskLruCache(File directory,int appVersion,int valueCount,long maxSize)

directory:表示磁盘缓存在文件系统中的存储位置。应用卸载后,此目录会一并被删除。

appVersion: 表示应用的版本号,当版本号发生变化时,DiskLruCache会清空之前所有的缓存文件。

valueCount:节点所对应的数据的个数。

maxSize:缓存的总大小

DiskLruCache的缓存添加

DiskLruCache的缓存查找

2.2 ImageLoader的实现

图片压缩功能的实现

内存缓存和磁盘缓存的实现

同步加载和异步加载接口的实现

3.ImageLoader的使用

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 读书笔记