Android体系结构组件ViewModel上下文



我正在研究Google的体系结构组件以实现ViewModel和Livedata到我的应用程序,官方文档说:

注意:由于ViewModel超过了特定的活动和片段实例,因此绝不应该引用一个视图,或任何可能在活动上下文中引用的类。如果ViewModel需要应用程序上下文(例如,要找到系统服务),它可以扩展AndroidViewModel类,并具有在构造函数中接收应用程序的构造函数(因为应用程序类扩展了上下文)

之后,我最终得到了这样的代码:

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()

不好吗?在需要时使用此应用程序变量,以访问共享流程或任何需要上下文的内容?如果是这样,我是否应该避免在ViewModel上使用它并仅在视图上使用它?特别是如果我想更新具有需要上下文的值的UI组件。我有点不知道该如何解决这个问题,我对任何建议都开放。

预先感谢

AndroidViewModel类是Android.ark.lifecycle软件包的一部分,是Android架构组件的一部分。它本身要求传递到构造函数的应用程序上下文。应用程序上下文生活在整个活动生命周期中。

ViewModel中的应用程序上下文是可以的,因为应用程序上下文与整个应用程序生命周期相关,而不是与活动生命周期相关的活动上下文。

viewModel文档专门指的是不使用活动上下文,但如果罚款,则应用程序上下文。

最新更新