将sharedPreferences从活动设置为viewModel是否存在问题?Android-MVVM



从活动初始化我的viewModel后,我从活动初始化viewModel中的sharedPreference变量(sharedPrefs(。

活动代码:

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

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

我用kotlin写了这篇文章,但用java回答也没问题。

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

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

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

实现解耦的一种方法是使用依赖注入框架。您可以将共享的pref注入视图模型构造函数或存储库类,而不依赖于活动。这样你就可以更容易地测试东西了。

相关内容

最新更新