【Android 内存优化】Bitmap 硬盘缓存 ( Google 官方 Bitmap 示例 | DiskLruCache 开源库 | 代码示例 )(一)

简介: 【Android 内存优化】Bitmap 硬盘缓存 ( Google 官方 Bitmap 示例 | DiskLruCache 开源库 | 代码示例 )(一)

一、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 版本 , 尽量不要直接下载开发中的最新版本 ;

image.png



这里选择下载最新的 Release 版本 , disklrucache-2.0.2 版本 , 点击此处直接调转到该界面 ;

image.png



下载完毕后 , 打开压缩包 , 直接将这三个文件 , 拷贝到项目中 ;

image.png







三、磁盘缓存初始化


首先声明 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




目录
相关文章
|
25天前
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
Android远程连接和登录FTPS服务代码(commons.net库)
22 1
|
1月前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异:从代码到用户体验
【10月更文挑战第5天】在移动应用开发的广阔天地中,安卓和iOS两大平台各占半壁江山。它们在技术架构、开发环境及用户体验上有着根本的不同。本文通过比较这两种平台的开发过程,揭示背后的设计理念和技术选择如何影响最终产品。我们将深入探讨各自平台的代码示例,理解开发者面临的挑战,以及这些差异如何塑造用户的日常体验。
|
2月前
|
存储 Java Android开发
🔥Android开发大神揭秘:从菜鸟到高手,你的代码为何总是慢人一步?💻
在Android开发中,每位开发者都渴望应用响应迅速、体验流畅。然而,代码执行缓慢却是常见问题。本文将跟随一位大神的脚步,剖析三大典型案例:主线程阻塞导致卡顿、内存泄漏引发性能下降及不合理布局引起的渲染问题,并提供优化方案。通过学习这些技巧,你将能够显著提升应用性能,从新手蜕变为高手。
28 2
|
3月前
|
JSON JavaScript 前端开发
Android调用Vue中的JavaScript代码
Android调用Vue中的JavaScript代码
36 3
|
3月前
|
Java Android开发
Android项目架构设计问题之要提升代码的可读性和管理性如何解决
Android项目架构设计问题之要提升代码的可读性和管理性如何解决
38 0
|
存储 编解码 Android开发
Android内存优化-Bitmap内存优化
在日常开发中,我们不免会使用到Bitmap,而bitmap确实实在在的是内存使用的 “大户”,如何更好的使用 bitmap,减少其对 App内存的使用,是我们开发中不可回避的问题。
186 0
Android内存优化-Bitmap内存优化
|
存储 编解码 缓存
|
3天前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。

热门文章

最新文章