Java资源缓存 之 LruCache
LruCache (此类在android-support-v4的包中提供) 这个类非常适合用来缓存图片,它的主要算法原理是把最近使用的对象用强引用存储在 LinkedHashMap 中,并且把最近最少使用的对象在缓存值达到预设定值之前从内存中移除。 Java资源缓存中的LruCache是一个非常实用的内存缓存机制,特别适用于Android应用程序,尤其是对于频繁加载和显示图片的应用。LruCache是Android Support Library v4中的一个类,它基于LinkedHashMap实现,遵循“最近最少使用”(Least Recently Used)的缓存策略。 在LruCache的工作原理中,它会保持最近使用的对象处于强引用状态,存储在内部的LinkedHashMap中。LinkedHashMap是一种有序的哈希表,它可以保持插入顺序或者访问顺序,LruCache选择后者,即每次访问一个元素时,该元素会被移动到链表头部。当缓存容量达到预设的最大值时,最不常使用的对象(位于链表尾部)将被自动移除,以便为新添加的元素腾出空间。这种机制有助于高效地利用有限的内存资源。 在使用LruCache时,首先需要确定缓存的大小。通常,我们可以获取应用程序的总内存并将其一部分分配给缓存。例如,取最大内存的1/5作为缓存大小。以下是一个创建LruCache实例的例子: ```java int maxMemory = (int) Runtime.getRuntime().maxMemory(); int cacheSize = maxMemory / 5; LruCache<String, Bitmap> lruCache = new LruCache<>(cacheSize) { @Override protected int sizeOf(String key, Bitmap value) { return value.getByteCount(); } }; ``` `sizeOf`方法用于计算每个缓存项的大小,这里使用Bitmap的`getByteCount`方法来计算图片占用的字节数。这个大小将用于判断是否超出缓存限制。 然后,我们可以通过`put`和`get`方法来存取缓存。`put`方法用于将资源添加到缓存,如果资源已经存在,它会被更新到链表头部。`get`方法用于获取缓存中的资源,同样会将获取的项移动到头部。以下是这两个方法的简单应用: ```java public void putBitmapToCache(String url, Bitmap bitmap) { if (getBitmapFromCache(url) == null) { lruCache.put(url, bitmap); } } public Bitmap getBitmapFromCache(String url) { return lruCache.get(url); } ``` 需要注意的是,LruCache实例应当只被创建一次,否则可能导致不同的对象使用不同的缓存,这可能会引起数据一致性问题。 LruCache类本身包含了一些其他的方法,如`evictAll`用于清除所有缓存项,`remove`用于手动移除特定项,以及`resize`用于调整缓存的大小。此外,如果你需要在缓存项被移除时执行清理操作,可以重写`entryRemoved`方法。 LruCache是Android开发中一个强大的内存管理工具,通过合理地使用它可以显著提升应用性能,尤其是在处理大量图片或其他资源时。正确配置和使用LruCache可以帮助开发者有效地平衡内存使用与性能,避免频繁的磁盘或网络I/O,提高用户体验。
- 粉丝: 0
- 资源: 956
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- S7-200SMART多段插补库(含使用说明+示例程序).rar
- 毕业设计-基于SSM协同过滤音乐推荐管理系统全部资料+详细文档+高分项目+源码.zip
- 毕业设计-基于SSM小区物业管理系统全部资料+详细文档+高分项目+源码.zip
- 毕业设计-基于SSM网上医院预约挂号系统全部资料+详细文档+高分项目+源码.zip
- 毕业设计-基于SSM学生毕业设计-论文选题系统全部资料+详细文档+高分项目+源码.zip
- 毕业设计-基于SSM学而优奖学金评定管理系统全部资料+详细文档+高分项目+源码.zip
- 毕业设计-基于thinkphp6.0+mysql+bootstrap4的疫情防控系统全部资料+详细文档+高分项目+源码.zip
- 3-各地区-不同行业-就业、失业、工资144个指标(1990-2021年).zip
- MATLAB代码:计及源-荷双重不确定性的电厂 微网日前随机优化调度 关键词:电厂 微网 随机优化 随机调度 源-荷双重不确定性 电厂调度 参考文档:Virtual power plant
- rds.zip
- common.zip
- 毕业设计-基于VUe+Element的人事管理系统全部资料+详细文档+高分项目+源码.zip
- 毕业设计-基于Structs+Hibernate+Spring+mahout+bootstrap+mysql 实现的网上书店前后台系统全部资料+详细文档+高分项
- 毕业设计-基于vue+Python在线考试系统前端全部资料+详细文档+高分项目+源码.zip
- 毕业设计-基于vue2的在线答题系统前端全部资料+详细文档+高分项目+源码.zip
- 毕业设计-基于VUE+PHP的高校校友信息管理系统毕业设计-全部资料+详细文档+高分项目+源码.zip