使用场景

1、场景一:图片缓存利器。

可以规定缓存大小、有效避免OOM、自动移除队尾不用的图片缓存、避免HashMap各种问题。

2、场景二:通信缓存

从服务端需要获取数据,但是当访问的数据比较大,比较多,并且是重复数据时,会极大影响性能,甚至应用崩溃,手机卡死,这时候就要考虑缓存机制了!Android中可通过缓存来减少频繁的网络操作,减少流量、提升性能。

代码示例

举一个简单的图片缓存示例

public class LruCacheDemo {LruCache<String, Bitmap> mImageCache;private void initImageCache() {int cacheSize = 4; //设置最大缓存mImageCache = new LruCache<String, Bitmap>(cacheSize) {@Overrideprotected int sizeOf(String key, Bitmap bitmap) {//重写sizeOf,并放回以kb为单位的缓存对象的大小return bitmap.getRowBytes() * bitmap.getHeight() / 1024;}};}public void displayImage(final String url, final Bitmap bitmap) {//缓存图片的url和bitmapmImageCache.put(url, bitmap);}//其它代码省略
}

LruCache扩展

1、LruCachae是解决OOM的利器,不用担心崩溃问题。

2、LruCache是一种缓存策略,持有的是强引用,但是会控制在一个峰值下。它内部维护了一个队列,每当从中取出一个值时,该值就移动到队列的头部。当缓存已满而继续添加时,会将队列尾部的值移除,方便GC。LruCache用于内存缓存,在避免程序发生OOM和提高执行效率有着良好表现。

3、LruCache是线程安全的,因此是可以采用多线程并发处理。

4、LruCache的实现正是基于LRU(Least Recently Used)算法。最近最少使用,我理解的就是最久远的最少使用先被淘汰。下图展示了LRU算法的核心思想,是最常用也是比较简单的一种:

假设一个队列的最大容量是5,那么新进的元素会被添加到头部,当队列已满时继续添加会移除尾部的元素。值得注意的是,如果有一个不在队头的元素C又一次插入到队列,因为队列中已经存在C,则不会重复插入,而是将C元素移动到头部,相当于它的存在优先级当前是最高的。

5、sizeOf解释

LruCache在插入元素前会调用一次sizeOf,前面已经说过默认返回1,但一般我们会根据实际需要重写。比如用LruCache存储的value为File,那么sizeOf返回的就应该是当前对应该key的文件大小。

Android LruCache 缓存相关推荐

  1. Android 图片缓存之内存缓存技术LruCache,软引用

    Android 图片缓存之内存缓存技术LruCache,软引用

  2. LruCache缓存处理及异步加载图片类的封装

    Android中的缓存处理及异步加载图片类的封装   一.缓存介绍: (一).Android中缓存的必要性: 智能手机的缓存管理应用非常的普遍和需要,是提高用户体验的有效手段之一. 1.没有缓存的弊端 ...

  3. Android图片缓存之Lru算法

    前言: 上篇我们总结了Bitmap的处理,同时对比了各种处理的效率以及对内存占用大小.我们得知一个应用如果使用大量图片就会导致OOM(out of memory),那该如何处理才能近可能的降低oom发 ...

  4. Android Bitmaps缓存

    Android 开发中,bitmap是引起内存泄漏的罪魁祸首,关于bitmap的加载,缓存策略,官方已经给了很详细的方法: 缓存之Memory Cache: 缓存的策略,是利用应用程序的分配的内存拿出 ...

  5. Android LRUCache原理

    关于Android的三级缓存,其中主要的就是内存缓存和硬盘缓存.这两种缓存机制的实现都应用到了LruCache算法,今天我们就从使用到源码解析,来彻底理解Android中的缓存机制. 一.Androi ...

  6. android图片缓存,直接应用项目中的Android图片缓存技术

    前不久搞的Android图片缓存,刚开始引入开源的框架,用着还行,但是在开发中遇到问题,就比如universal-image-loader-1.9.5.jar这个框架吧,在加载图片的时候自定义imag ...

  7. android强制缓存写磁盘,优雅的构建 Android 项目之磁盘缓存(DiskLruCache)

    Android 的缓存技术 一个优秀的应用首先它的用户体验是优秀的,在 Android 应用中恰当的使用缓存技术不仅可以缓解服务器压力还可以优化用户的使用体验,减少用户流量的使用.在 Android ...

  8. Android - LruCache

    一.概念 LruCache:是Android 3.1(API12)所提供的一个缓存类,缓存到达限制的时候优先删除近期最少使用. LRU算法原理:内部维护了一个 LinkedHashMap 是以访问顺序 ...

  9. Android图片缓存框架Glide

    Android图片缓存框架Glide Glide是Google提供的一个组件.它具有获取.解码和展示视频剧照.图片.动画等功能.它提供了灵活的API,帮助开发者将Glide应用在几乎任何网络协议栈中. ...

最新文章

  1. codefores 786B. Legacy(最短路,线段树优化拆点,好题)
  2. 【Android View绘制之旅】Layout过程
  3. 减少系统资源占用的15个CSS常识
  4. 用NPOI从DataBase到Excel '2
  5. python pip使用_Python——pip的安装与使用
  6. opencv图像处理时使用stringstream批量读取图片,处理后并保存
  7. (二)深入了解超文本
  8. 为什么“how to say”是错的?
  9. mysql查看执行计划任务_学习计划 mysql explain执行计划任务详解
  10. pythonwin1064位_在Windows 10 64位中安装Matplotlib
  11. 在Windos上安装Nginx
  12. 软件一定要联网安装,只有内网就干瞪眼
  13. Matlab实现杨氏双缝干涉和(单缝+多缝+圆孔+矩孔)衍射
  14. Visual Leak Detector(vld)无法显示内存泄露行号
  15. 二极管的工作原理,什么是二极管?
  16. 三大运营商网络使用频段及随身wifi选用
  17. 微信视频号头像怎么换?怎么设置?必看!5个思路帮你快速敲定头像
  18. 有人知道要怎么用c++提取出文本里面的信息吗,例如把这个表格里的所有住户账号,密码提取出来
  19. 是非人生 — 一个菜鸟程序员的5年职场路 第14节
  20. 学生信息管理系统中系统登录问题

热门文章

  1. Java开发 - 不知道算不算详细的分布式事务详解
  2. 2021年11月中国乘用车品牌出口量排行榜:MGZS出口量突破2万辆,Top前五中有3个品牌归属上海股份(附月榜TOP150详单)
  3. bluehost主机php语句,BlueHost主机配置Php.ini中文解释(三)
  4. 防火墙技术之安全策略
  5. garch模型python步骤_利用python进行时间序列分析——从随机游走到GARCH模型(一)...
  6. 漫谈大数据时代的个人信息安全(三)——“点赞之交”
  7. IOCTL命令格式解析以及调用过程
  8. PM项目管理理论基础2为什么要执行项目
  9. css max-width_CSS中的max-width属性
  10. AVPlayer耳机插拔