我的应用程序在启动时会提取一些json数据,实际上,一旦提取数据,在用户体验期间,我真的不需要再次提取。后端数据最多一天更新几次,所以我想我只想在app启动时获取数据,然后在持续时间内使用相同的数据,并为用户提供手动刷新数据的选项。所以,我的问题是,我应该在哪里/如何存储这些数据?我已经设置了所有的数据结构(类和子类)。其中一些类可能有200个左右的实例。如果我将所有内容都作为成员变量存储在activity_main类中,则在其他活动启动后,其他活动将无法使用它。将它们全部存储在数据库中可能是一种选择,但感觉有点过头了。我真的不需要数据在会话之间保持。有没有一种方法可以很容易地将它存储在内存中,并且所有活动都可以很容易地访问它?
最佳答案
你应该考虑操作系统在内存不足的情况下终止你的应用程序进程,所以把你的数据备份到磁盘上是一件好事。这样,您就可以在后台从服务器刷新磁盘缓存时显示用户数据。
选择数据存储工具取决于处理数据的方式。
当然,有一个使用Realm的选项,但是您应该考虑到它不是关系数据库这一事实。因此,如果您的业务逻辑中有包含连接和其他关系内容的复杂域模型,我将使用其他内容。它是线程安全的,也有迁移(但,对我来说,偏头痛总是痛苦的,你只是不能做任何事情)。realm现在应该是rxjava友好型的(v0.87中添加了支持),有一些disadvantages(其中一部分可能已经修复),但是在使用之前应该考虑一下。
至于更多的关系方法,有SQLBrite库:
一个围绕sqliteopenhelper的轻量级包装器,它向sql操作引入了反应流语义。
它不是orm(但如果您愿意,可以在sqlbrite之上添加某种orm:see this以获取更多信息)。事实上,单独使用这个库只是做了一件事(而且做得很好),它提供了一种协调和组合表更新通知的机制(realm也有这种能力),这样您就可以在数据更改时(以sql方式)更新查询。它尊重rxjava!
作为sqlbrite的替代,您可以查看StorIO。
还有很多不同的orm解决方案,如greendao、ormlite等。
但我很肯定,前两个库(realm或sqlbrite)中的一个可能会帮助您。因此,分析你的应用程序,这些libs,并决定什么更适合。
p.s.Great article关于rxjava如何帮助您轻松处理来自不同数据源(内存缓存+磁盘缓存+网络)的数据。可能会有帮助!