博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android的缓存(LruCache 和 DiskLruCache)
阅读量:5907 次
发布时间:2019-06-19

本文共 1148 字,大约阅读时间需要 3 分钟。

hot3.png

最近真的太懒了,想尽各种理由说服自己不干活 , 辛苦啊!

近段时间,项目中的图片加载出了些问题(加载失败啦,OOM啦),就去重新看了目前流行的图片加载缓存框架,看的过程中就感觉受益东西还是应该记录下来,下面就记录一下LruCache 和 DiskLruCache的原理

LruCache 的实现原理

LruCache 实现最核心的东西就是LinkedHashMap , LruCache的Lru算法就是通过LinkedHashMap来实现的.说到这里呢,就有必要先说下LinkedHanhMap.

LinkedHanhMap是什么东东.首先呢,从名字上看,LinkedHanhMap还是map,只不过笔HashMap稍微变态一点而已,LinkedHanhMap继承与HashMap , 但是LinkedHanhMap使用了一个双向链表来存储Map中的Entry(这是啥,可以理解为map中存放key和value一个对象,HashMap会通过Key的hash值在bucket中找这个对象,突然发现这里一两句说不清楚,还是自行去了解吧)顺序关系,这种循序有两种,一种是插入顺序,另一种便是LruCache是用Lru顺序,使用哪种可以通过LinkedHanhMap的构造方法来指定。所以呢,LinkedHanhMap对于get,put,remove等操作除了要做HashMap该做的事情,还得调整Entry在链表中的顺序.

说完LinkedHanhMap,我们就该说LruCache了,LruCache就是通过设置LinkedHanhMap的链表顺序为Lru来实现Lru缓存的. 实现方式:当我们调用LruCache 的get方法获取缓存对象(Entry),put方法插入新的对象,LruCache都会把它们放到链表的尾端.这样当缓存内存使用达到设定最大值的时候,便会将链表表头的对象移除掉(经常被操作的都放在链表微端了,表头对象肯定就是不常用的).这就是LruCache的缓存管理方式,很简答吧.但是很有借鉴意义,简单实用才是最好的.

DiskLruCacher 的实现原理

DiskLruCacher应该是源于google的一个开源项目BitmapFun,记忆中Bitmapfun中是有一个DiskLruCacher类的,这个工程师Google自己的培训教程.而DiskLruCacher就是用来做磁盘缓存的,而用的缓存机制也是Lru(LruCache 的Lru算法一毛一样哦)算法.好吧,我承认,我要开始偷懒了,DiskLruCacher源码不多,而且网上这方面的源码分析一大堆,就不写了,收工.

转载于:https://my.oschina.net/xuyuqiang/blog/1799218

你可能感兴趣的文章
Excel VBA连接MySql 数据库获取数据
查看>>
Developing a Service Provider using Java API(Service Provider Interface)(转)
查看>>
oschina程序开发
查看>>
“正在注册字体”问题解决
查看>>
iOS开发-OpenGL ES入门教程1
查看>>
Java 设计模式专栏
查看>>
使用ASP.NET Atlas SortBehavior实现客户端排序
查看>>
图像滤镜处理算法:灰度、黑白、底片、浮雕
查看>>
Office文档出错的几种原因与解决方法
查看>>
正则表达式 学习笔记1.1
查看>>
AssetBundle进阶内存优化(Unity 4.x)
查看>>
《从零开始学Swift》学习笔记(Day 40)——析构函数
查看>>
Exchange2003-2010迁移系列之十,Exchange证书攻略
查看>>
extmail集群的邮件负载均衡方案 [lvs dns postfix]
查看>>
更改UIView的背景
查看>>
APUE第15章学习扎记之程序的存储区布局试验
查看>>
ubuntu升级16.04 inter idea 中文输入法无效
查看>>
三目运算判断jsp脚本里面的值
查看>>
sshtunnel在本地访问云服务器mysql
查看>>
小蚂蚁学习APP接口开发(1)—— json方式封装通信接口
查看>>