Android - LruCache
一、概念
LruCache:是Android 3.1(API12)所提供的一个缓存类,缓存到达限制的时候优先删除近期最少使用。
LRU算法原理:内部维护了一个 LinkedHashMap 是以访问顺序排列的满了就删除尾元素(即近期最少使用的Least Recently Used),当获取缓存对象的同时会将该元素更新到队列头部。读写线程安全,对缓存的元素是强引用,不允许null键null值,为null说明没有缓存。
二、使用
设置 LruCache 缓存大小,一般为当前进程可用内存的1/8。
重写 sizeOf() 计算出要缓存的对象的大小。()总容量和对象大小计算的单位要一直一致
//获取当前进程可用内存大小,并分配1/8用于缓存
private val cacheSize = Runtime.getRuntime().totalMemory() / 1024 / 8
private val lruCache = object : LruCache<String, Bitmap>(cacheSize.toInt()) {//必须重写此方法来测量每张图片的大小(单位要跟总缓存的单位一致)override fun sizeOf(key: String?, value: Bitmap?): Int {return value?.allocationByteCount ?: 0}
}
//提供存入方法
fun putBitmap(key: String, value: Bitmap) {lruCache.put(key, value)
}
//提供取出方法(返回null意味着不存在缓存)
fun getBitmap(key: String): Bitmap? {return lruCache.get(key)
}
Android - LruCache相关推荐
- Android LruCache 压缩图片 有效避免程序OOM
压缩加载大图片 我们在编写Android程序的时候经常要用到许多图片,不同图片总是会有不同的形状.不同的大小,但在大多数情况下,这些图片都会大于我们程序所需要的大小.比如说系统图片库里展示的图片大都是 ...
- Android LruCache技术原理
概述 记得在很早之前,我有写过一篇文章Android高效加载大图.多图解决方案,有效避免程序OOM,这篇文章是翻译自Android Doc的,其中防止多图OOM的核心解决思路就是使用LruCache技 ...
- Android LruCache和DiskLruCache相结合打造图片加载框架(仿微信图片选择,照片墙)
LrcCache和DiskLruCache相结合打造图片加载框架 转载请标明出处:http://blog.csdn.net/luoshishou/article/details/51299169 源码 ...
- android LRUCache解析
LRU(Least Recently Used)最近最少使用算法 原理 缓存保存了一个强引用(Android 2.3开始,垃圾回收器更倾向于回收弱引用和软引用,软引用和弱引用变得不可靠,Android ...
- Android LRUCache原理
关于Android的三级缓存,其中主要的就是内存缓存和硬盘缓存.这两种缓存机制的实现都应用到了LruCache算法,今天我们就从使用到源码解析,来彻底理解Android中的缓存机制. 一.Androi ...
- android lrucache清空,Android LruCache 的 Bug
码哒,今天无意中发现Android 5.0(api level 21)之前的LruCache实现居然存在一个bug. 由于在电脑上(Java SE环境,非手机上)测试code比较方便,我便将最近写在A ...
- android lrucache,Android——使用LruCache缓存图片
为什么要缓存图片: (1)根据具体设备的不同Android系统为每个应用分配了固定内存空间供应用使用: (2)图片是一种很占内存的资源文件,如果界面中加载一张图片还好说,如果要加载大量的图片就会超过系 ...
- Android LruCache 缓存
使用场景 1.场景一:图片缓存利器. 可以规定缓存大小.有效避免OOM.自动移除队尾不用的图片缓存.避免HashMap各种问题. 2.场景二:通信缓存 从服务端需要获取数据,但是当访问的数据比较大,比 ...
- 【Android 应用开发】LruCache 简介
文章目录 LruCache 应用场景 LruCache 算法原理 LruCache 实现 LruCache 参考 LruCache 应用场景 1. 缓存需求 : 处理大量数据时 , 为了提升性能 , ...
最新文章
- static关键字总结
- pypthon3精要(15)-zip
- Object之defineProperty
- windows10下载
- (六)Spark-Eclipse开发环境WordCount-JavaPython版Spark
- JavaScript 对象继承
- php修改特定位bit的值,解读天书 - 漏洞利用中级技巧的分析
- nginx.conf文件详解
- 图网络笔记-知识补充与node2vec代码注解
- 如何选择自己适合的引流平台?
- ubuntu snappy 记事
- sublime text的插件emmet的功能介绍页
- SPOJ375 Query on a tree(LCT边权)
- Docker 网易镜像仓库使用
- android3.0新功能,PCWorld:Android 3.0最受期待的五大新功能
- Python实现遗传算法解决TSP问题
- 如何利用matlab循环读取文件夹中的文件
- 中文分词词库汇总(一)
- android ar 动画,Android实现支付宝AR扫描动画效果
- 年薪120W的架构师简历你见过吗?java程序员该如何达到?
热门文章
- dede 织梦文章整合的批量插入图片
- python数字字符串排序_Python-数字字符串排序
- 2019江苏单招计算机分数线,2019年江苏单招分数线一般多少分
- android 电量排行榜,续航时间长的安卓手机有哪些?2020长续航安卓手机排行榜
- 推荐6款自学网站,好用到暴风哭泣!
- java饥荒,饥荒DTS服務器modoverrides.lua生成工具
- 【玩转RT-Thread】CPK-RA6M4智慧门禁系统教学
- 计算机adminstor用户不见了,Win7系统administrator账户不见了怎么办 附解决办法
- JNI便捷开发框架JNA框架之入门(一)
- HTML5实现简易电子书