Android LruCache与DiskLruCache

学习自

  • Android开发艺术探索
  • https://blog.csdn.net/guolin_blog/article/details/28863651

例行废话

在上一篇的 认识Bitmap 的博客,学会了如何更好地加载Bitmap,那么这一片文章呢,我们来学习一下如何缓存Bitmap。

当我们第一次从网络上加载图片的时候,这时候我们就已将将图片加载到了内存中了,然么我们第二次再加载同一个图片的时候,就完全没有必要再从网络上再加相同的图片了。当我们第一加载图片的时候直接将图片缓存到本地第二次加载图片的时候直接去本地取就行。这样不经可以节省用户的流量并且还要比直接从网络上读取要更款速(毕竟网络有带宽的限制)。 并且我们可以在本地和内存中分开存储(内存中只放使用频率最高的),因为知己从内存中加载要更快与从本地加载,可以让用户体验更加友好。

Lru算法

当然,因为不管是内存还是手机的存储都不是特别打的,所以我们并不能无节制的缓存图片,尤其是内存中的缓存,如果因为内存中缓存过大影响到APP的运行效率了那可就是因噎废食了。 所以说缓存的大小必须是严格限制的。

现在,如何管理缓存是一个比较重要的问题,最简单的方法是当缓存满了以后按照时间排序,然后移除最早缓存的图片,当然这种方法并不完美,现在普遍采用的算法是 Lru算法,即,最早加载最少使用的缓存被先移除

万幸,我们并不用去自己写相应的内存和本地磁盘的缓存算法, 相应的类已经被提供了。 Android SDK提供了一种 内存的Lru缓存类LruCache. 而磁盘缓存的类并没有在SDK中提供,我们需要手动下载 DiskLruCache.

通过这两个类我们就可以实现图片的缓存了,并且我们还可以通过将这两个类封装一下形成自己的 ImageLoader 框架。

LruCache

下面是LruCache类的声明,可以发现LRUCache 类 和Map集合非常类似(

Android-LruCache与DiskLruCache的更多相关文章

  1. Android照片墙完整版,的完美结合LruCache和DiskLruCache

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/34093441 在上一篇文章其中,我们学习了DiskLruCache的概念和基本使用 ...

  2. Android照片墙完整版,完美结合LruCache和DiskLruCache

    转载地址:http://blog.csdn.net/guolin_blog/article/details/34093441#comments 在上一篇文章当中,我们学习了DiskLruCache的概 ...

  3. 使用lrucache和diskLrucache实现照片墙

    其实,在真正的项目实战当中如果仅仅是使用硬盘缓存的话,程序是有明显短板的.而如果只使用内存缓存的话,程序当然也会有很大的缺陷.因此,一个优秀的程序必然会将内存缓存和硬盘缓存结合到一起使用,那么本篇文章 ...

  4. Android LruCache技术原理

    概述 记得在很早之前,我有写过一篇文章Android高效加载大图.多图解决方案,有效避免程序OOM,这篇文章是翻译自Android Doc的,其中防止多图OOM的核心解决思路就是使用LruCache技 ...

  5. Android LRUCache简介

    LRU Cache数据结构的介绍可以参考前面的http://www.cnblogs.com/XP-Lee/p/3441555.html. 本文以Android LRUCache来做一个简单的介绍.我们 ...

  6. Android内存优化之 LruCache与DiskLruCache

    在日常的Adroid开发中我们经常遇到需要处理大量图片的地方,但Android手机的内存有限该怎么避免手机 内存溢出导致app程序oom,google提供了两种解决方式 LruCache LruCac ...

  7. Android Volley框架的使用(四)图片的三级缓存策略(内存LruCache+磁盘DiskLruCache+网络Volley)

    在开发安卓应用中避免不了要使用到网络图片,获取网络图片很简单,但是需要付出一定的代价——流量.对于少数的图片而言问题不大,但如果手机应用中包含大量的图片,这势必会耗费用户的一定流量,如果我们不加以处理 ...

  8. 安卓开发笔记——关于图片的三级缓存策略(内存LruCache+磁盘DiskLruCache+网络Volley)

    在开发安卓应用中避免不了要使用到网络图片,获取网络图片很简单,但是需要付出一定的代价——流量.对于少数的图片而言问题不大,但如果手机应用中包含大量的图片,这势必会耗费用户的一定流量,如果我们不加以处理 ...

  9. 综合使用LruCache和DiskLruCache 缓存图片

    Activity public class MainActivity extends Activity {     private GridView mPhotoWall;     private P ...

  10. 网络图片的获取以及二级缓存策略(Volley框架+内存LruCache+磁盘DiskLruCache)

    在开发安卓应用中避免不了要使用到网络图片,获取网络图片很简单,但是需要付出一定的代价——流量.对于少数的图片而言问题不大,但如果手机应用中包含大量的图片,这势必会耗费用户的一定流量,如果我们不加以处理 ...

随机推荐

  1. 2、SpringBoot接口Http协议开发实战8节课(7-8)

    7.SpringBoot2.x文件上传实战 简介:讲解HTML页面文件上传和后端处理实战 1.讲解springboot文件上传 MultipartFile file,源自SpringMVC 1)静态页 ...

  2. Android五种数据存储方式

    android 五种数据存储 :SharePreferences.SQLite.Contert Provider.File.网络存储 Android系统提供了四种存储数据方式.分别为:SharePre ...

  3. MAC上mongodb连接不上

    1.在Mac客户端里输入 mongo,发现mongo连接不上了,原因是mongo的服务没有开启. 2.在命令行了输入 mongod,开启服务的命令 3.启动起来以后,用mongo连接服务器.

  4. windows系统中搭建Jenkins服务器

    1       须知 100.126.36.232等Jenkins服务器是通过设置代理访问外网,管理Jenkins和插件升级站点的,本地安装受黄区网络限制需要特殊配置,且有些插件无法下载. 前提条件: ...

  5. MySQL数据库——安装教程(5.7版本)

    一.配置MySQL数据库 1.解压绿色版mysql,并改名为mysql5.7,如下图 对比一下下图5.6以前的版本,少data目录(存放数据)和my-default.ini文件(配置信息) 二.安装服 ...

  6. 《TCP/IP 详解 卷1:协议》第 3 章:链路层

    在体系结构中,我们知道:链路层(或数据链路层)包含为共享相同介质的邻居建立连接的协议和方法,同时,设计链路层的目的是为 IP 模块发送和接受 IP 数据报,链路层可用于携带支持 IP 的辅助性协议,例 ...

  7. rsync使用详解

    1.什么是Rsync Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.Rsync使用所谓的“Rsync算法”来使本地和远 程两个 ...

  8. winform(记事本--剪切复制等和打开)

  9. Java基础100 待续

    1.待续 原创作者:DSHORE 作者主页:http://www.cnblogs.com/dshore123/ 原文出自:https://www.cnblogs.com/dshore123/p/107 ...

  10. 洛谷P1970 花匠

    传送门 首先可以知道,如果一个序列是连续上升的,那么只需要取这一个序列中最高的元素即可,因为取其它的不能保证大于后面的.连续下降的序列同理.而这些恰好就是波峰和波谷. 所以遇到 $ j $ 比之前的 ...