我正在思考如何在我的Android应用程序中理想地实现缓存层。
目前,我有通用的活动(Activity),可以显示来自远程服务器的数据。数据由DTO TemplateInstance表示。每个TemplateInstance都有一个包含组件的Map,每个组件都可以有子组件。这些组件本身可以是文本(字符串)、图像(字节数组)或时间(或者通过对Component进行子类化来实现其他类型)。
目前,我的应用程序每次启动活动时都会从服务器加载一个TemplateInstance。
现在,我想在应用程序中实现缓存层,以便于:
- 最大程度地减少显示数据的时间
- 在服务器上更改数据时刷新数据
我的策略如下:
- 已启动的活动通过ID从本地存储加载TemplateInstance(如果存在)
- 更新服务在后台检查模板是否已在服务器上更改(使用数据库中的版本字段)。
- 如果服务器版本大于本地版本或者没有本地TemplateInstance,则从服务器检索数据,更新本地存储并更新视图。
我已经成功地使用db4o实现了这一点。这种解决方案只有两个问题:
- db4o受GPL许可证保护(我不能使用它)
- 当我加载具有多个图像的TemplateInstances时,db4o速度非常慢(查询需要4秒)
现在我正在寻找最好的替代方案。我的想法如下:
- SQLite不适合数据结构
- 我不需要数据库功能 - 仅通过ID检索对象即可
- 将对象保存在内存中会显着提高速度
- 应用程序退出时,应将内存状态保存到磁盘,以便可以在启动时重新实例化对象
你认为什么是这个问题的最佳解决方案?
我的研究带我了解到EHCache和JCS,但我从未使用过它们。您认为它们是否合适,尤其是在 Android 手机上使用资源吗?或者您有其他建议吗?