Android 的 MVVM 中在哪里保存 ViewModel 状态?
Where to Save ViewModel State in Android's MVVM?
作为 Android 开发的初学者,我试图通过将我的第一个应用程序转换为推荐的 MVVM 结构来清理我的代码库。我目前坚持的是试图找出存储视图模型状态的最佳方法。
在此示例中,我需要存储的状态只是一个字符串 ArrayList(指示选中了 recyclerview 中的哪些复选框)。我目前将这个 ArrayList 作为一个字段存储在我的 ViewModel 中,包裹在我的 activity 观察到的 MutableLivedata 对象中。这种将 ViewModel 状态存储为字段的方法在 long 运行 中似乎不可行。我可以想象随着我的应用程序的增长,我的 ViewModel classes 会变得非常臃肿和混乱。
我目前使用 Firebase 实时数据库来存储我需要持久保存的数据,正如 Android 架构所建议的那样,通过存储库访问这些数据。但是,我的 ViewModel 的状态不需要在应用程序关闭后保留,因此为此对我的 Firebase 数据库进行网络调用绝对没有意义。
我的问题是:在哪里保存我的 ViewModel 的状态最有意义? 我在我面前看到的半明智的选择是将它保存为我的 ViewModel 中的字段class(我目前的方法),将其保存在 Room 数据库中(并在每次应用程序被杀死时重置数据库),或将其作为字段保存在我的存储库中 class(似乎不正确) .我乐于接受建议!
这取决于您的需求:
- 如果您只想为配置更改保持状态,则无需执行任何其他操作。 ViewModel 会为您处理。
- 如果您想在关闭屏幕后返回到该屏幕时看到相同的状态,那么我建议使用本地缓存解决方案,例如 Room。您可以在 room 之上创建一个存储库并将其注入您的 Viewmodel。
- 如果你想在应用程序关闭之前保持状态,你也可以创建一个内存存储库(一个带有状态的单例存储库)。当应用程序被终止时,内存将被 OS 回收,以便它们将被清除。
无论如何,远程存储数据似乎都不是您正在寻找的解决方案。
由于 Android 系统内存回收情况,我也不会依赖内存缓存解决方案。
您可以使用缓存解决方案,并在再次打开应用程序时清除缓存。
作为 Android 开发的初学者,我试图通过将我的第一个应用程序转换为推荐的 MVVM 结构来清理我的代码库。我目前坚持的是试图找出存储视图模型状态的最佳方法。
在此示例中,我需要存储的状态只是一个字符串 ArrayList(指示选中了 recyclerview 中的哪些复选框)。我目前将这个 ArrayList 作为一个字段存储在我的 ViewModel 中,包裹在我的 activity 观察到的 MutableLivedata 对象中。这种将 ViewModel 状态存储为字段的方法在 long 运行 中似乎不可行。我可以想象随着我的应用程序的增长,我的 ViewModel classes 会变得非常臃肿和混乱。
我目前使用 Firebase 实时数据库来存储我需要持久保存的数据,正如 Android 架构所建议的那样,通过存储库访问这些数据。但是,我的 ViewModel 的状态不需要在应用程序关闭后保留,因此为此对我的 Firebase 数据库进行网络调用绝对没有意义。
我的问题是:在哪里保存我的 ViewModel 的状态最有意义? 我在我面前看到的半明智的选择是将它保存为我的 ViewModel 中的字段class(我目前的方法),将其保存在 Room 数据库中(并在每次应用程序被杀死时重置数据库),或将其作为字段保存在我的存储库中 class(似乎不正确) .我乐于接受建议!
这取决于您的需求:
- 如果您只想为配置更改保持状态,则无需执行任何其他操作。 ViewModel 会为您处理。
- 如果您想在关闭屏幕后返回到该屏幕时看到相同的状态,那么我建议使用本地缓存解决方案,例如 Room。您可以在 room 之上创建一个存储库并将其注入您的 Viewmodel。
- 如果你想在应用程序关闭之前保持状态,你也可以创建一个内存存储库(一个带有状态的单例存储库)。当应用程序被终止时,内存将被 OS 回收,以便它们将被清除。
无论如何,远程存储数据似乎都不是您正在寻找的解决方案。
由于 Android 系统内存回收情况,我也不会依赖内存缓存解决方案。
您可以使用缓存解决方案,并在再次打开应用程序时清除缓存。