从 activity 到 viewModel 设置 sharedPreferences 有问题吗? Android - MVVM

Is there an issue with setting sharedPreferences from the activity to the viewModel? Android - MVVM

从 activity 初始化我的 viewModel 后,我从 activity.

初始化 viewModel 中的 sharedPreference 变量 (sharedPrefs)

Activity代码:

    housemate2ViewModel = ViewModelProvider(this)[Housemate2ViewModel::class.java]
    housemate2ViewModel.sharedPrefs = this.getSharedPreferences(mainSharedPrefTag, Context.MODE_PRIVATE)

这看起来像 viewModel 引用了 activity 并且可能导致内存泄漏。为了解决这个问题,当 activity 被销毁时,我将 viewModel 中的这个变量设为 null。我看到一个解决方案是扩展 AndroidViewModel 而不是 ViewModel。我问这个问题的目的主要是了解这可能导致的问题,同时也知道解决这个问题的正确方法是什么。任何答案都有帮助。

我是用 kotlin 写的,但 java 中的答案很好。

如您所述,最好不要依赖 activity。每次重新创建 activity,例如方向更改时,视图模型都保持不变。将变量设置为 null 是一种解决方法。您每次都必须重新初始化共享首选项,而且出错的可能性更大。

视图应该只观察用户操作并将其发送到视图模型。

您可以使用 AndroidViewModel 获取应用程序上下文,但建议的做法是避免在 ViewModel 中使用具有生命周期的对象。

一种解耦方法是使用依赖注入框架。您可以将共享首选项注入视图模型构造函数或存储库 class,而不依赖于 activity。 这使您也可以更轻松地进行测试。