【Android 应用开发】LruCache 简介
2023-06-13 09:17:41 时间
文章目录
LruCache 应用场景
1. 缓存需求 : 处理大量数据时 , 为了提升性能 , 需要对其中的部分数据进行缓存 ; 涉及到使用缓存 , 和删除内存缓存操作 , 使缓存的数据大小保持在一个稳定的水平 ;
2. 数据写入缓存 : 当需要使用某个数据时 , 将该数据写入缓存 , 此时先对内存使用情况进行一次判定 ; 如果内存不足 , 需要移除缓存数据中的部分内容 , 然后再将数据写入缓存 ; 当然 , 如果缓存内存足够 , 直接写入缓存即可 ;
3. LruCache 引入 : 那么如何确定删除缓存中的哪些数据呢 , 这里就需要用到 LruCache 了 ;
LruCache 算法原理
LRU ( Least Recently Used 最近最少使用 ) 算法 : 内部维护了一个固定大小的队列 ( 先进先出 ) ; 放入元素时根据不同的情况执行不同的策略 ;
- 1. 缓存中是否有该元素 : 如果缓存中有该元素 , 那么将该元素放到队列的队头 ;
- 2. 缓存中没有该元素 : 如果缓存中没有改元素 , 那么需要插入该元素 ;
- 3. 缓存空间是否已满 : 如果缓存空间满了 , 需要将队尾元素删除 , 将元素放在队首 ;
- 4. 缓存空间没有满 : 如果缓存空间没有满 , 直接将元素放在队首 ;
缓存队列中 , 队尾的元素就是最近最少使用的元素 , 因为其一旦使用就会提升到队首 , 因此当缓存满了以后 , 就删除队尾的元素 ;
LruCache 实现
1. Android 中的 LruCache : 其缓存空间就是一个 LinkHashMap 链表 , 当调用 put 方法向其中放入新元素时 , 就会判断这个 LinkHashMap 链表是已满 , 如果没有空间 , 就将最后一个最近最少使用的元素删除 ;
2. LinkHashMap 实现 : LinkHashMap 链表内部由数组和双向链表实现 , 其能够保证与队列一致的性质 , 即先进先出 , 并保证其插入取出顺序的一致性 ; 当调用 get 方法获取其中的元素时 , 会将该元素提取到队头中 , 这符合了 LRU 算法的要求 ;
LruCache 参考
LruCache 参考 :
相关文章
- 移动应用架构治理初探:从依赖分析与 Android 应用的生命周期说起
- android 浏览器 开发,Android 浏览器的开发实例分享
- android app 退出功能,Android 完美退出 App (Exit)
- [译] 将通用 Android 音乐播放器转化为 instant 应用
- textview设置字体大小-Android应用开发之TextView设置个别字体样式
- 【Android 应用开发】 ActionBar 基础
- 【Android应用开发】 Android 崩溃日志 本地存储 与 远程保存
- 【Android应用开发】 Universal Image Loader ( 使用简介 | 示例代码解析 )
- 【Android 应用开发】Paint 滤镜原理 之 颜色矩阵 ( 颜色模式 | 颜色通道 | 颜色矩阵 | 矩阵运算 | 矩阵乘法 | 矩阵加法 | 颜色矩阵深入解析 )
- 【Android 应用开发】Paint 图形组合 Xfermod 之 合成模式表示方法 ( Xfermod 使用步骤 | 透明度 颜色值 公式表示方法 | 老版本表示方法 | 合成区域分块 )
- 【Android 应用开发】Android 组件 位置坐标 属性 ( 组件位置属性 | 父容器坐标系坐标 | 窗口坐标系坐标 | 屏幕坐标系坐标 | 触摸坐标 )
- 【Android 应用开发】Google 官方 EasyPermissions 权限申请库 ( 简介 | 权限申请处理细节 | 添加依赖 | 界面权限申请结果处理 | 权限申请结果回调接口 )
- 【Android 安装包优化】WebP 应用 ( libwebp 源码下载 | Android.mk 和 Application.mk 构建脚本修改 | libwebp 函数库编译 )
- 【Android 应用开发】Android 杀进程总结 ( 杀后台进程 | 杀前台进程 | 杀其它进程 )
- 【Android 应用开发】动态权限管理示例 ( 使用原生代码实现 | 申请权限 | 判定权限申请结果 | 判定 “ 不再询问 “ 情况 )
- 【错误记录】Android 应用运行报错 ( You need to use a Theme.AppCompat theme (or descendant) with this activity. )
- 【Android 应用开发】Canvas 精准绘制文字 ( 文本边界坐标解析 | 绘图位置 )
- 【错误记录】Android 应用安全检测漏洞修复 ( StrandHogg 漏洞 | 设置 Activity 组件 android:taskAffinity=““ )
- 每日安全资讯:搜 Wi-Fi 热点 Android 应用数据泄露
- Android应用被黑,数百万汽车面临被盗风险
- Android应用开发SharedPreferences存储数据的使用方法
- Android应用开发工程目录作用介绍