第十二章 、Bitmap的加载和Cache

第十二章 、Bitmap的加载和Cache

  • 目前常用的缓存策略是LruCache和DiskLruCache,其中LruCache常被用作内存缓存,而DiskLruCache常被用作存储缓存。
  • Lru是Least Recently Used的缩写,即最近最少使用算法。

1. Bitmap的高效加载

  1. BtimapFactory提供了四种加载方法
    • decodeFile 文件系统
    • decodeResource 资源
    • decodeStream 输入流
    • decodeByteArray 字节数组
  2. 如何高效加载Bitmap?

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

    1. 将BitmapFactory.Options的inJustDecodeBounds参数设为true并加载图片。
    2. 从BitmapFactory.Options中获取原始宽高信息。它们对应于outWidth和outHeight。
    3. 根据采样率的规则并结合目标View的大小计算采样率inSampleSize。
    4. 将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用于实现存储设备存储。

  1. DiskLruCache 的创建

    1. 通过open方法用于创建自身:
      public static DiskLruCache(File directory,int appVersion,int valueCount,long maxSize)

      • directory:表示磁盘缓存在文件系统中的存储位置。应用卸载后,此目录会一并被删除。
      • appVersion: 表示应用的版本号,当版本号发生变化时,DiskLruCache会清空之前所有的缓存文件。
      • valueCount:节点所对应的数据的个数。
      • maxSize:缓存的总大小
    2. DiskLruCache的缓存添加

    3. DiskLruCache的缓存查找

2.2 ImageLoader的实现

  1. 图片压缩功能的实现
  2. 内存缓存和磁盘缓存的实现
  3. 同步加载和异步加载接口的实现

3.ImageLoader的使用

你可能感兴趣的:(android,读书笔记)