【Android 应用开发】LruCache 简介

简介: 【Android 应用开发】LruCache 简介

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 LruCache 文档

② 谈谈LruCache算法的底层实现原理及其内部源码

③ 完全解析Andorid的缓存机制LruCache


目录
相关文章
|
26天前
|
存储 Android开发 开发者
深入理解安卓应用开发的核心组件
【10月更文挑战第8天】探索Android应用开发的精髓,本文带你了解安卓核心组件的奥秘,包括Activity、Service、BroadcastReceiver和ContentProvider。我们将通过代码示例,揭示这些组件如何协同工作,构建出功能强大且响应迅速的应用程序。无论你是初学者还是资深开发者,这篇文章都将为你提供新的视角和深度知识。
|
4天前
|
搜索推荐 前端开发 Android开发
安卓应用开发中的自定义视图实现
【10月更文挑战第30天】在安卓开发的海洋中,自定义视图是那抹不可或缺的亮色,它为应用界面的个性化和交互体验的提升提供了无限可能。本文将深入探讨如何在安卓平台创建自定义视图,并展示如何通过代码实现这一过程。我们将从基础出发,逐步引导你理解自定义视图的核心概念,然后通过一个实际的代码示例,详细讲解如何将理论应用于实践,最终实现一个美观且具有良好用户体验的自定义控件。无论你是想提高自己的开发技能,还是仅仅出于对安卓开发的兴趣,这篇文章都将为你提供价值。
|
4天前
|
Android开发 Swift iOS开发
探索iOS与安卓应用开发的差异性
探索iOS与安卓应用开发的差异性
17 2
|
10天前
|
传感器 XML IDE
探索安卓应用开发:从基础到进阶
【10月更文挑战第23天】在数字化时代的浪潮中,移动应用已成为人们日常生活的延伸。本文以安卓平台为例,深入浅出地介绍了如何从零开始构建一个安卓应用,涵盖了开发环境搭建、基本组件使用、界面设计原则以及进阶技巧等关键步骤。通过实例演示和代码片段,引导读者逐步掌握安卓应用开发的核心技能,旨在激发更多开发者对安卓平台的探索热情,并为初学者提供一条清晰的学习路径。
|
24天前
|
Java Android开发 Swift
掌握安卓与iOS应用开发:技术比较与选择指南
在移动应用开发领域,谷歌的安卓和苹果的iOS系统无疑是两大巨头。它们不仅塑造了智能手机市场,还影响了开发者的日常决策。本文深入探讨了安卓与iOS平台的技术差异、开发环境及工具、以及市场表现和用户基础。通过对比分析,旨在为开发者提供实用的指导,帮助他们根据项目需求、预算限制和性能要求,做出最合适的平台选择。无论是追求高度定制的用户体验,还是期望快速进入市场,本文都将为您的开发旅程提供有价值的见解。
|
10天前
|
开发工具 Android开发 Swift
探索iOS与安卓应用开发的异同点
【10月更文挑战第24天】本文通过比较iOS和安卓开发环境,旨在揭示两大移动平台在开发过程中的相似性与差异性。我们将探讨开发工具、编程语言、用户界面设计、性能优化及市场分布等方面,以期为开发者提供全面的视角。通过深入浅出的分析,文章将帮助读者更好地理解每个平台的独特之处及其对应用开发的影响。
|
10天前
|
XML IDE Java
安卓应用开发入门:从零开始的旅程
【10月更文挑战第23天】本文将带领读者开启一段安卓应用开发的奇妙之旅。我们将从最基础的概念讲起,逐步深入到开发实践,最后通过一个简易的代码示例,展示如何将理论知识转化为实际的应用。无论你是编程新手,还是希望扩展技能的软件工程师,这篇文章都将为你提供有价值的指导和启发。
20 0
|
22天前
|
安全 Java 开发工具
掌握安卓应用开发:从基础到高级的全面指南
本文旨在为读者提供一个详尽的指南,帮助他们掌握安卓应用开发的基础知识及高级技巧。从环境搭建到项目实践,逐步深入讲解安卓开发的各个环节。无论是对于刚入门的初学者还是希望进一步提升的开发者,本文都将提供实用的建议和示例代码,帮助你快速上手并提升技能。
|
23天前
|
存储 Java 开发工具
掌握安卓应用开发:从基础到高级的全面指南
这篇文章旨在为读者提供一个关于安卓应用开发的全面指南。无论您是初学者还是有一定经验的开发者,本文将带您深入探讨安卓开发的核心概念、工具和技术。我们将从环境搭建和基本组件讲起,逐步引导您了解布局管理、用户交互处理、数据存储与网络通信等高级主题。通过阅读本文,您将能够更好地理解安卓应用开发的整体流程,并具备创建高质量安卓应用的能力。
|
26天前
|
安全 Android开发 数据安全/隐私保护
安卓应用开发中的常见挑战及解决策略
【10月更文挑战第7天】在安卓应用开发的旅程中,开发者常面临各种挑战,从设备兼容性到性能优化,再到用户界面设计。本文将深入探讨这些常见问题,并提供实用的解决策略,帮助开发者提升应用质量和用户体验。我们将通过代码示例和实践建议,展示如何克服这些挑战,打造更流畅、更吸引人的安卓应用。
38 0