一、Google 官方 Bitmap 相关示例参考
Google 官方相关示例参考 :
① Android 官方示例 : https://github.com/android
② Android 图形示例 : android/graphics-samples
③ Bitmap 展示 Module : DisplayingBitmaps
④ 官方示例中的硬盘缓存类 : DiskLruCache.java
在 DisplayingBitmaps 示例中 , Google 官方展示了在应用中如何使用 Bitmap ;
二、磁盘缓存类 DiskLruCache
推荐使用 JakeWharton 的开源库 DiskLruCache , 点击上述连接即可进入工程界面 ;
点击 GitHub 界面右侧的 Release 界面 , 下载发布的 Release 版本 , 尽量不要直接下载开发中的最新版本 ;
这里选择下载最新的 Release 版本 , disklrucache-2.0.2 版本 , 点击此处直接调转到该界面 ;
下载完毕后 , 打开压缩包 , 直接将这三个文件 , 拷贝到项目中 ;
三、磁盘缓存初始化
首先声明 DiskLruCache 磁盘 LRU 缓存类 ,然后初始化 DiskLruCache 类 , 主要是设置磁盘缓存目录 , 应用版本号 , 每个 Key 可以对应多个文件个数 , 磁盘大小
/** * 磁盘缓存 */ private DiskLruCache mDiskLruCache; /** * 初始化磁盘缓存 * @param diskDirectory */ private void initDiskLruCache(String diskDirectory){ try { /* 初始化内存缓存 需要传入内存缓存目录文件 APP 版本 缓存值的个数 缓存大小 , 单位字节 , 这个最重要 */ mDiskLruCache = DiskLruCache.open( new File(diskDirectory), BuildConfig.VERSION_CODE, 1, 8 * 1024 * 10024 ); } catch (IOException e) { e.printStackTrace(); } }
snapshot = mDiskLruCache.get(key);
、存储数据到磁盘缓存中
1 . 从 DiskLruCache 中获取 Bitmap 流程 :
① 获取快照 : 通过 key 获取 DiskLruCache.Snapshot 对象 ;
snapshot = mDiskLruCache.get(key);
② 打开编辑器 : 打开 DiskLruCache.Editor , 该用法与 SharedPreference 用法类似 ;
DiskLruCache.Editor editor = mDiskLruCache.edit(key);
③ 获取输出流 : 从 DiskLruCache.Editor 对象中获取出输出流 , 这里的 0 表示获取该 key 对应的第 0 个文件 , 每个 Key 可以对应多个文件 , 这个值是创建 DiskLruCache 时传入的 valueCount 参数 ;
outputStream = editor.newOutputStream(0);
④ 写出 Bitmap 对象到文件中 :
bitmap.compress(Bitmap.CompressFormat.JPEG, 0, outputStream);
⑤ 编辑器提交数据 :
editor.commit();
2 . 代码示例 :
/**
/** * 将 Bitmap 放入 磁盘缓存 中 * @param key * @param bitmap */ public void putBitmapToDisk(String key, Bitmap bitmap){ DiskLruCache.Snapshot snapshot = null; OutputStream outputStream = null; try { snapshot = mDiskLruCache.get(key); // 如果缓存中有对应 key 键值的文件 , 不进行任何处理 if(snapshot != null) { // 该用法与 SharedPreference 用法类似 DiskLruCache.Editor editor = mDiskLruCache.edit(key); if(editor != null){ // 这里的 0 表示获取该 key 对应的第 0 个文件 // 每个 可以 可以对应多个文件 , 这个值是创建 DiskLruCache 时传入的 valueCount 参数 outputStream = editor.newOutputStream(0); // 写出 Bitmap 对象到文件中 bitmap.compress(Bitmap.CompressFormat.JPEG, 0, outputStream); // 该用法与 SharedPreference 用法类似 editor.commit(); } } } catch (IOException e) { e.printStackTrace(); }finally { if(snapshot != null) { snapshot.close(); } if(outputStream != null){ try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } }
4