安卓漫漫路之缓存策略.

本文介绍Android中的两种常用缓存策略:LruCache和DiskLruCache。LruCache适用于内存缓存,采用LRU算法管理缓存对象;DiskLruCache用于磁盘缓存,同样依据LRU算法实现存储设备上的缓存管理。

缓存策略在Android有着广泛的使用场景.


目前比较常用的缓存算法是LRU(Least Recently Used):近期最少使用算法.

核心思想 : 当缓存满时,会优先淘汰近期最少使用的缓存对象.


采用LRU算法的缓存有两种:(LruCache和DiskLruCache)

一 . LruCache : 用于实现内存缓存.

LruCache是一个泛型类,并且LruCache是线程安全的:他的内部采用一个LinkedHashMap以强引用的方式存储外界的缓存对象,其提供了put函数和get函数来完成缓存的存储和获取.当缓存满时,LruCache会采用LRU算法来移除近期最少使用的缓存对象然后再添加新的缓存对象.

------------------------------------------------------------------------------------------------------------------

强引用,软引用和弱引用的区别如下所示:

强引用 : (String str = “abc”;  list.add(str); )

如果一个对象具有强引用,那就类似于必不可少的生活用品。

垃圾回收器绝不会回收它.当内存空 间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足问题. 并且list集合中的内容即使在内存不足的情况下也不会释放.


软引用 : 

如果一个对象只具有软引用,那就类似于可有可物的生活用品。

如果内存空间足够,垃圾回收器就不会回收它,如果内存空间不足了,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。软引用可用来实现内存敏感的高速缓存。 
软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被垃圾回收,JAVA虚拟机就会把这个软引用加入到与之关联的引用队列中。 


弱引用:

如果一个对象只具有弱引用,那就类似于可有可物的生活用品。

弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它 所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过,由于垃圾回收器是一个优先级很低的线程, 因此不一定会很快发现那些只具有弱引用的对象。 
弱引用可以和一个引用队列(ReferenceQueue)联合使用,如果弱引用所引用的对象被垃圾回收,Java虚拟机就会把这个弱引用加入到与之关联的引用队列中。 

如果弱引用对象回收完之后,内存还是报警,继续回收软引用对象 

如果虚引用对象回收完之后,内存还是报警,继续回收弱引用对象 



请遵循如下规则:

(1).获取到总容量的大小.
(2).从BitmapFactory.Options中取出原图片的原始宽高信息,他们对应于outWidth参数和outHight参数
(3).根据采样率的规则并结合目标ImageView的所需大小计算出采样率inSampleSize.
(4).将BitmapFactory.Options的inJustDecodeBounds参数设为false,然后重新加载图片.

提供总容量的大小.

实例化LruCache时需要重写sizeOf方法即可.也可以贴贴源码.

Runtime.getRuntime().maxMemory():

//应用程序最大可用内存  
        int maxMemory = ((int) Runtime.getRuntime().maxMemory())/1024/1024;  
        //应用程序已获得内存  
        long totalMemory = ((int) Runtime.getRuntime().totalMemory())/1024/1024;  
        //应用程序已获得内存中未使用内存  
        long freeMemory = ((int) Runtime.getRuntime().freeMemory())/1024/1024;  
        System.out.println("---> maxMemory="+maxMemory+"M,totalMemory="+totalMemory+"M,freeMemory="+freeMemory+"M"); 

二 . DiskLruCache : 用于实现存储设备缓存.

DiskLruCache用于实现存储设备缓存,即磁盘缓存(通过将缓存对象写入文件系统,从而实现缓存的效果).


DiskLruCache不能通过构造方法来创建,他可以通过open(File directory, int appVersion, int valueCount , long maxSize)来创建.

参数一 : File directory(磁盘缓存在文件系统中的存储路径)

大写的PS : 缓存路径可以选择SD卡上的缓存目录. /sdcard/Android/data/package_name/cache目录.其中package_name表示当前的包名.好处就是当应用被卸载时此目录会一并删除.当然也可以选择SD卡上的其他目录.这样在应用被删除时此目录下的缓存文件不会被删除.具体遵循您的需求而定.

参数二 : int appVersion(应用的版本号,一般设置为1即可)

大写的PS : 理论上讲当版本号发生改变时DiskLruCache会清空之前所有的缓存文件,但在实际开发中则不然,没有卵用.

参数三 : int valueCount(单个节点所对应的数据的个数,一般设置为1即可)

参数四 : long maxSize(缓存的总大小) 

大写的PS : 例如设置缓存的总大小为66MB,当缓存数据文件大小超出这个值时,DiskLruCache会根据最近最少使用算法清除一些缓存从而保证总大小不大于这个您设定好的缓存值.





























































Delphi 12.3 作为一款面向 Windows 平台的集成开发环境,由 Embarcadero Technologies 负责其持续演进。该环境以 Object Pascal 语言为核心,并依托 Visual Component Library(VCL)框架,广泛应用于各类桌面软件、数据库系统及企业级解决方案的开发。在此生态中,Excel4Delphi 作为一个重要的社区开源项目,致力于搭建 Delphi 与 Microsoft Excel 之间的高效桥梁,使开发者能够在自研程序中直接调用 Excel 的文档处理、工作表管理、单元格操作及宏执行等功能。 该项目以库文件与组件包的形式提供,开发者将其集成至 Delphi 工程后,即可通过封装良好的接口实现对 Excel 的编程控制。具体功能涵盖创建与编辑工作簿、格式化单元格、批量导入导出数据,乃至执行内置公式与宏指令等高级操作。这一机制显著降低了在财务分析、报表自动生成、数据整理等场景中实现 Excel 功能集成的技术门槛,使开发者无需深入掌握 COM 编程或 Excel 底层 API 即可完成复杂任务。 使用 Excel4Delphi 需具备基础的 Delphi 编程知识,并对 Excel 对象模型有一定理解。实践中需注意不同 Excel 版本间的兼容性,并严格遵循项目文档进行环境配置与依赖部署。此外,操作过程中应遵循文件访问的最佳实践,例如确保目标文件未被独占锁定,并实施完整的异常处理机制,以防数据损毁或程序意外中断。 该项目的持续维护依赖于 Delphi 开发者社区的集体贡献,通过定期更新以适配新版开发环境与 Office 套件,并修复已发现的问题。对于需要深度融合 Excel 功能的 Delphi 应用而言,Excel4Delphi 提供了经过充分测试的可靠代码基础,使开发团队能更专注于业务逻辑与用户体验的优化,从而提升整体开发效率与软件质量。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值