我正在研究google的体系结构组件,以便在我的应用程序中实现ViewModel和LiveData,官方文档中说:
注意:由于ViewModel比特定的活动和片段实例化更长,所以它不应该引用视图或任何可能包含对活动上下文的引用的类。如果ViewModel需要应用程序上下文(例如,查找系统服务),它可以扩展AndroidViewModel类并在构造函数中具有接收应用程序的构造函数(因为Application扩展上下文)
在此之后,我得到了这样的代码:
public class ViewModelTest extends AndroidViewModel {
public ViewModelTest(Application application) {
super(application);
}
public void test(){
Prefs.getCurrentCode(getApplication());
}我应该在活动上实例化它吗?
val viewModel2 = ViewModelProviders.of(this).get(ViewModelTest::class.java)
viewModel2.test()不是很糟吗?当需要访问SharedPreferences或任何需要上下文的内容时,使用此应用程序变量?如果是的话,我应该避免在ViewModel上使用它,而只在视图上使用它吗?特别是,如果我想用需要上下文的值更新UI组件。我不知道该如何处理这个问题,我愿意听取任何建议。
提前感谢
发布于 2018-04-05 17:37:49
AndroidViewModel类是作为android.arch.lifecycle包的一部分提供的,该包是Android体系结构组件的一部分。它本身调用传递给构造函数的应用程序上下文。应用程序上下文存在于整个活动生命周期中。
ViewModel中的应用程序上下文是可以的,因为应用程序上下文与整个应用程序生命周期相关联,而不是与活动生命周期相关联的活动上下文。
ViewModel文档特别提到的不是活动上下文,而是应用程序上下文(如果可以的话)。
https://stackoverflow.com/questions/46300395
复制相似问题