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. android 基础题

    1. Android的四大组件是哪些,它们的作用? (1).Activity:Activity是Android程序与用户交互的窗口,是Android构造块中最基本的一种,它需要为保持各界面的状态,做很 ...

  2. 【Mysql sql inject】【入门篇】sqli-labs使用 part 4【18-20】

    这几关的注入点产生位置大多在HTTP头位置处 常见的HTTP注入点产生位置为[Referer].[X-Forwarded-For].[Cookie].[X-Real-IP].[Accept-Langu ...

  3. AWTK(Toolkit AnyWhere): 为嵌入式、手机和桌面开发的通用GUI【转】

    转自:https://blog.csdn.net/absurd/article/details/80958279 AWTK = Toolkit AnyWhere AWTK是吸取了FTK和CanTK的精 ...

  4. ES系列四、ES6.3常用api之文档类api

    1.Index API: 创建并建立索引 PUT twitter/tweet/ { "user" : "kimchy", "post_date&quo ...

  5. oracle巡检脚本备份

    重做日志生成情况,一天生成日志大小:select round(sum(blocks*block_size)/1024/1024/1024,2) BLOCK from v\$archived_log w ...

  6. SVN设置必须锁定

    SVN是一个开放源代码的版本控制系统,相信做开发的基本上都用过,这里就不多介绍了.团队协作开发时常常会出现提交的文档互相冲突的问题,这里给大家介绍一下给SVN文件设置必须锁定的方法,当然你也可以对冲突 ...

  7. JavaScript——封装

    封装:使用对象封装的好处是可以减少全局变量污染的机会,讲属性,函数都隶属一个对象. 封装前: <script> var name="foo"; //name是全局的,被 ...

  8. 解决git: 'subtree' is not a git command. See 'git --help'.

    一.第一方法 git clone https://github.com/git/git.git cd git/contrib/subtree sudo make prefix=/usr sudo ma ...

  9. 读SRE Google运维解密有感(一)

    前言 这几天打算利用碎片时间读了一下"SRE Google运维解密"这本书,目前读了前几章,感觉收获颇多,结合自己的工作经历和书中的要点,写一些感悟和思考 SRE 有关SRE我就不 ...

  10. saltstack自动化运维系列①之saltstack服务安装及简单使用

    Saltstack介绍 Salt三种运行方式 1.local本地运行2.Master/Minion3.Salt ssh Salt的三大功能 a.远程执行b.配置管理(状态管理)c.云管理:阿里云,aw ...