在Android中处理必须在活动生命周期之外持久存在的数据的最佳实践?

在Android中处理必须在活动生命周期之外持久存在的数据的最佳实践?,android,architecture,Android,Architecture,当我查看有关Android应用程序架构最佳实践的文档时,所有推荐的架构(MVVM、MVP等)似乎都将数据模型与视图生命周期联系起来。视图包含对viewmodel/presenter的引用,而viewmodel/presenter包含对模型的引用,因此当视图消失时,数据也消失了。但只要我的应用程序打开,我就有数据需要保存 我知道SharePreferences,但我的数据似乎太结构化了。我不想从像内部存储或sqlite这样的文件中写入和重新读取数据,因为我保存这些数据的全部目的是避免这样的调用。我

当我查看有关Android应用程序架构最佳实践的文档时,所有推荐的架构(MVVM、MVP等)似乎都将数据模型与视图生命周期联系起来。视图包含对viewmodel/presenter的引用,而viewmodel/presenter包含对模型的引用,因此当视图消失时,数据也消失了。但只要我的应用程序打开,我就有数据需要保存

我知道SharePreferences,但我的数据似乎太结构化了。我不想从像内部存储或sqlite这样的文件中写入和重新读取数据,因为我保存这些数据的全部目的是避免这样的调用。我唯一能想到的另一个选择是将数据存储在单例中,但这似乎不是最优的,因为这样我就必须跟踪单例是否已初始化


有没有Android的最佳实践来管理这样的持久数据?

在我看来,在配置更改时保存应用程序状态的最佳方法是将数据模型保留在内存中

因此,您允许重新创建活动,但必须持久化presenter/viewmodel

对于AAC,这已经实现了(ViewModelStore),它也在一些MVP框架中实现(例如Moxy),或者您可以在DI中使用本地单例手动实现它


也许我的答案正是@Gabe Sechan想说的。

根据你的提问,可能有几十个答案。单例、缓存、依赖项注入等。对于不同类型的数据,一个应用程序可以使用多个。这里提出的问题太宽泛了,我怎么能缩小范围呢?我不明白依赖注入如何用于此。数据将从何处注入到何处?当我查找缓存时,它们看起来更像是一种管理从何处提取数据的方法,而不是存储数据。我不明白如何使它们独立于活动生命周期,而不使它们本质上成为一个单一的、本质上是静态的数据。静态数据和单例数据之间有区别。是的,在某一点上,可能会有一个静态的某处(或者像application这样的应用程序生命周期类中的一个变量)。这并不意味着它是一个Singleon-Singleton是一个类,在这个类中,构造函数防止一次出现多个Singleon。但是静态数据之上的机制很重要,有各种各样的机制,它们有不同的用例和不同的缺点。例如,我公司的应用程序在所有屏幕中共享一个Javascript实例。这是需要向其发送命令的每个活动中注入的依赖项。它还具有模型对象,这些对象存储在WeakReference缓存中,以便在内存中已经存在(它们具有uuid唯一密钥)的情况下提供对它们的访问,这样实例就不会失去同步,如果数据库还不在内存中,我们将转到数据库。然后我们有一些应用程序级变量,比如应用程序中保存的依赖注入上下文。当活动被销毁时,ViewModelStore似乎仍然会销毁视图模型。它只允许它在配置更改中生存。