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. 如何调整cell的大小

    一般情况下,我们使用tableview的时候从来没有设置过cell的大小(w,h).位置(x,y)等,而是系统直接给我们自动生成,但是有的时候我们可能会改动cell的大小及位置,比如:在适配ios6跟 ...

  2. C#的五种访问修饰符

    简述: 所有类型和类型成员都具有可访问性级别,用来控制是否可以在您程序集的其他代码中或其他程序集中使用它们. 可使用访问修饰符指定声明类型或成员的可访问性. 在C#语言中,共有五种访问修饰符:publ ...

  3. java 多线程四

    java 多线程一 java 多线程二 java 多线程三 java 多线程四 一个生产者,消费者的例子: import java.util.Stack; /** * Created by root ...

  4. 使用matplotlib绘制多个图形单独显示

    使用matplotlib绘制多个图形单独显示 一 代码 import numpy as np import matplotlib.pyplot as plt #创建自变量数组 x= np.linspa ...

  5. Linux内存管理--物理内存分配【转】

    转自:http://blog.csdn.net/myarrow/article/details/8682819 1. First Fit分配器 First Fit分配器是最基本的内存分配器,它使用bi ...

  6. JavaScript——封装

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

  7. Expm 9_2 有向图的强连通分量问题

      [问题描述] 给定一个有向图,设计一个算法,求解并输出该图的各个强连通分量. package org.xiu68.exp.exp9; import java.util.ArrayList; imp ...

  8. python之鸭子类型

    python不支持多态,也不用支持多态,python是一种多态语言,崇尚鸭子类型. 在程序设计中,鸭子类型是动态类型的一种风格,不是由继承特定的类或实现特定的接口,而是当前的方法和属性的集合决定,鸭子 ...

  9. 基于axios创建的实例使用axios.all,报错:this.$http is not a function,但请求成功

    报以下错误: 原因: axios实例没有all这个方法,all是axios的静态方法 解决方法: 以下方法不是最好的,还没找到更好的解决办法,目前先这样解决.

  10. python接口自动化测试十二:对返回的json的简单操作

    # 1.requests里面自带解析器转字典 print(r.json()) print(type(r.json())) # 取出json中的'result_sk_temp'字段 # {"r ...