Android应用的缓存策略

Kon*_*rer 10 android caching

我正在考虑如何在我的Android应用程序中理想地实现缓存层.

目前我有通用的活动,显示来自远程服务器的数据.数据由DTO TemplateInstance表示.每个TemplateInstance都有一个包含组件的Map,每个组件都可以有子组件.组件本身可以是Text(String),Image(ByteArray)或Time(或者通过子类组件的任何内容).

目前,每次启动Activity时,我的应用程序都会从​​服务器加载TemplateInstance.

我现在想在应用程序中实现缓存层,以便

  1. 显示数据的时间减少到最低限度,
  2. 在服务器上更改数据时刷新数据.

我的策略如下:

  • 已启动的Activity通过ID从本地存储加载TemplateInstance(如果存在)
  • 如果服务器上的TemplateInstance已更改(使用数据库中的版本字段),UpdateService将在后台检查
  • 如果服务器版本大于本地版本或没有本地TemplateInstance,则从服务器检索数据,更新本地存储并更新视图

我已经使用db4o成功实现了这一点.此解决方案只有两个问题:

  • db4o在GPL下(我不能使用它)
  • 当我加载具有许多图像的TemplateInstances(查询为4秒)时,db4o非常慢

现在我正在寻找db4o的最佳替代品.到目前为止,我的想法是:

  • 由于数据的结构,SQLite不适用
  • 我不需要数据库功能 - 通过ID检索对象就足够了
  • 将对象保存在内存中会明显加快
  • 应用程序退出时,应将内存状态保存到磁盘,因此可以在启动时重新实例化对象

您认为最佳解决方案是什么?

我对此的研究将我带到了EHCacheJCS,这是我从未使用过的.您认为它们是否合适,也适用于Android手机上的资源?或者你有其他建议吗?

gon*_*lva 5

如果我正确理解您的情况,我认为您应该实现自己的缓存解决方案。

我会使用一个HashMap<id, TemplateInstance>. HashMap 是可序列化的,您可以分别使用ObjectOutputStream和存储/加载它ObjectInputStream

  • 您应该使用文件来缓存图像,而不是可序列化的对象。 (4认同)