我正在学习谷歌的架构组件,以将ViewModel和LiveData实现到我的应用程序中,官方文档指出:
注意:由于ViewModel的生命周期超出特定的activity和fragment实例,因此它不应引用View或任何可能持有对activity上下文的引用的类。如果ViewModel需要Application上下文(例如查找系统服务),则可以扩展AndroidViewModel类,并在构造函数中接收Application参数(因为Application类扩展了Context)。
遵循这个提示,我最终得到了如下的代码:
public class ViewModelTest extends AndroidViewModel {
public ViewModelTest(Application application) {
super(application);
}
public void test(){
Prefs.getCurrentCode(getApplication());
}
我应该在Activity上正常实例化它吗?
val viewModel2 = ViewModelProviders.of(this).get(ViewModelTest::class.java)
viewModel2.test()
使用这个应用程序变量来访问SharedPreferences或其他需要上下文的内容是不好的,对吗?如果是这样的话,我应该避免在ViewModel中使用它,并仅在视图中使用它吗?特别是如果我想使用需要上下文的值更新UI组件。我有点不知道如何解决这个问题,欢迎任何建议。
提前致谢。
Context
对象的角色的经典博客文章 感兴趣。我很高兴能为你提供帮助! - CommonsWare