• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Andriod DiskLruCache的使用案例

Andriod DiskLruCache的使用案例

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android disklrucache,disklrucache,disklrucache下载,disklrucache.open,disklrucache原理等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Andriod DiskLruCache的使用案例


DiskLruCache是谷歌推荐的用来实现硬盘缓存的类,本案例将对DiskLruCache的基本用法做一个总结,包括:创建缓存、查找使用缓存、移除缓存等等。

实现效果图

这里写图片描述

创建DiskLruCache

DiskLruCache使用open方法创建一个实例,如下所示:对应的四个参数分别为:缓存目录、应用版本号、单个key对应的数据的个数(一般设为1)、缓存的总大小,其中key是图片的url经过MD5转码获得的,防止url带有特殊符号影响缓存的正常使用。

try {
            File cacheDir = getDiskCacheDir(this, "bitmap");
            if (!cacheDir.exists()) {
                cacheDir.mkdirs();
            }
            mDiskLruCache = DiskLruCache.open(cacheDir, getAppVersion(this), 1, 10 * 1024 * 1024);
        } catch (Exception e) {
            e.printStackTrace();
        }

存储缓存

通过DiskLruCache.Editor可以获取到缓存对象的编辑对象editor,类似于SharedPreference的editor。DiskLruCache不允许同时编辑一个缓存对象,如果这个缓存对象正在被编辑,则editor==null。

new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    String key = hashKeyForDisk(imageUrl);
                    DiskLruCache.Editor editor = null;

                    editor = mDiskLruCache.edit(key);
                    if (editor != null) {
                        OutputStream outputStream = editor.newOutputStream(0);
                        if (downloadUrlToStream(imageUrl, outputStream)) {
                            editor.commit();
                        } else {
                            editor.abort();
                        }
                    }
                    //不该频繁的flush,防止journal日志文件的频繁修改
                    mDiskLruCache.flush();
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            textView.setText("saveCache done,the bitmap is ready");
                        }
                    });
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();

读取缓存

DiskLruCache.get(String key)方法可以获取到一个Snapshot实例,通过DiskLruCache.Snapshot实例获取缓存文件的输入流,即可在imageView上显示该图片。

//读取缓存
        try {
            DiskLruCache.Snapshot snapshot = mDiskLruCache.get(hashKeyForDisk(imageUrl));
            if (snapshot != null) {
                InputStream is = snapshot.getInputStream(0);
                Bitmap bitmap = BitmapFactory.decodeStream(is);
                imageView.setImageBitmap(bitmap);
            } else {
                imageView.setImageBitmap(null);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

另外,DiskLruCache还提供了清空缓存delete()、获取缓存目录下的缓存大小size()等方法操作缓存。

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Andriod DiskLruCache的使用案例

相关文章

  • 2017-05-26新版mysql搭建多线程主从复制
  • 2017-05-26Androidstudio中导入内部依赖模块总结,androidstudio模块
  • 2017-05-26【转载】ReactiveX 的理念和特点,转载reactivex理念
  • 2017-05-26JRebel for Android 1.0发布!,jrebelandroid
  • 2017-05-26linux tcp GSO和TSO实现
  • 2017-05-26我的android学习经历10,android学习经历10
  • 2017-05-26redis一例连接池连接不上的故障及解决
  • 2017-05-26接入微信分享过程的喜和泪
  • 2017-05-26Android实现按两次back键退出应用,android两次back键
  • 2017-05-26Android中View的滑动冲突——Android开发艺术探索笔记

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • MySQL高可用组件MHA参数详解
    • Linux 新的API signalfd、timerfd、eventfd使用说明
    • Android SDK 与API版本对应关系,androidsdk
    • Android开发1:基本UI界面设计——布局和组件,androidui
    • 回顾自定义view三个构造函数,回顾view构造函数
    • Android-Universal-Image-Loader (图片异步加载缓存库)对Bitmap的优化处理
    • 如何挂载ubi文件系统
    • Android 搜索 把软键盘上的回车键改为搜索
    • Xamarin Android 应用程序内图标上数字提示,xamarinandroid
    • Android 实用代码片段,

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有