在android的mvvm中把viewmodel状态保存在哪里?

fquxozlt  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(515)

作为一个android开发的初学者,我试图通过将第一个应用程序转换为推荐的mvvm结构来清理我的代码库。我目前所坚持的是,试图找出存储视图模型状态的最佳方法。
在本例中,我需要存储的状态只是一个字符串的arraylist(表示选中了recyclerview中的哪些复选框)。我目前将这个arraylist作为字段存储在viewmodel中, Package 在活动观察的可变LiveData对象中。从长远来看,这种将viewmodel状态存储为字段的方法似乎不可行。我可以想象,随着我的应用程序的增长,我的viewmodel类会变得非常臃肿和混乱。
我目前使用一个firebase实时数据库来存储我需要持久化的数据,就像android架构建议的那样,通过存储库访问。然而,我的viewmodel的状态在应用程序关闭后不需要持久化,因此对我的firebase数据库进行网络调用是毫无意义的。
我的问题是:在哪里保存viewmodel的状态最有意义?我眼前看到的半明智的选择是将其保存为viewmodel类中的字段(我当前的方法)、将其保存在room数据库中(每次关闭应用程序时都重置数据库)或将其保存为repository类中的字段(似乎不正确)。我愿意接受建议!

but5z9lq

but5z9lq1#

这取决于您的需要:
如果您只想为配置更改保留状态,则无需执行更多操作。viewmodel将为您处理它。
如果您希望在关闭屏幕后返回到该屏幕时看到相同的状态,那么我建议使用本地缓存解决方案,例如room。您可以在文件室顶部创建一个存储库,并将其插入到viewmodel中。
如果希望在应用程序关闭之前保持状态,还可以创建内存中的存储库(带有状态的单例repo)。当应用程序被终止时,操作系统将回收内存以便清除它们。
在任何情况下,远程存储数据似乎都不是您要寻找的解决方案。
我也不会因为android系统内存回收的情况而依赖内存缓存解决方案。
您可以使用缓存解决方案,在再次打开应用程序时清除缓存。

相关问题