Android在哪里存储缓存数据?

时间:2015-12-21 22:01:33

标签: android

我的应用程序会在启动时提取一些json数据,并且实际上,一旦数据被拉出,我真的不需要在用户体验期间再次拉取它。后端数据最多可能每天更新几次,所以我想我只想在应用程序启动时抓取数据,然后在持续时间内使用相同的数据,并为用户提供手动刷新数据的选项。所以,我的问题是,我应该在哪里/如何存储这些数据?我已经设置了所有数据结构(类和子类)。并且可能有200个左右的某些类的实例。如果我将所有内容作为成员变量存储在activity_main类中,则在启动其他活动后,其他活动将无法使用它。将它们全部存储在数据库中可能是一种选择,但它有点像矫枉过正。我真的不需要数据在会话之间持续存在。有没有办法轻松将其存储在内存中,并且仍然可以轻松访问所有活动?

3 个答案:

答案 0 :(得分:2)

您应该考虑操作系统在内存不足的情况下查杀您的应用程序进程,因此将数据备份到磁盘上是一件好事。这样,您就可以在从服务器后台刷新用户数据时从磁盘缓存中显示用户数据。

选择数据存储工具取决于您处理数据的方式。

当然,可以选择使用Realm,但您应该考虑关键数据库这一事实。因此,如果您的业务逻辑中包含具有连接和其他关系内容的复杂域模型,那么我将使用其他内容。它是线程安全的,也有迁移(但是,对我而言,迁移总是很痛苦,你不能对它做任何事情)。 Realm现在应该是RxJava友好的(支持在v0.87中添加)有一些disadvantages(其中一部分可能已经修复),但你应该在使用之前考虑它。

至于更多关系方法,有SQLBrite库:

  

围绕SQLiteOpenHelper的轻量级包装器,它将反应流语义引入SQL操作。

它不是ORM(但如果您愿意,可以在SQLBrite之上添加某种类型的内容:see this以获取更多信息)。事实上,独自一人这个库正在做一件事(做得很好) - 它提供了一种协调和组合表更新通知的机制(Realm也有这样的能力),这样你就可以更新查询(以SQL方式)一旦数据发生变化。它尊重RxJava! 作为SQLBrite的替代方法,您可以查看StorIO

还有许多不同的ORM解决方案,如GreenDAO,ORMLite等。

但我很确定,前两个库(Realm或SQLBrite)中的一个可能会帮助你。因此,分析您的应用程序,这些库并确定哪些更适合。

P.S。 Great article关于RxJava如何帮助您轻松处理来自不同数据源(内存缓存+磁盘缓存+网络)的数据。可能会有所帮助!

答案 1 :(得分:1)

我仍然会推荐一个SQLite数据库,你可以很容易地将它声明为内存中的数据库。数据库,如果这是你想要的。

然而......如果一次又一次地下载冗余数据,我会对你的应用程序的用户感到不安。我只是建议制作内容提供商并完成它。这使您可以访问SyncAdapter,并在代码的位置之间定义明确的界限。

'''制作一个好的ContentProvider就是制作好的POJO,它有从POJO转换的方法 - > ContentValues和Cursor - > POJO(一个或多个)。

答案 2 :(得分:1)

最简单的方法是将json文件存储在Apps数据存储中,并在每次需要时解析json。

不推荐,因为每次解析数据的成本都很高。

最佳选择是实施Realm(替换为Sqlite),它非常容易实现且速度非常快。