繁体   English   中英

Android架构组件ViewModel上下文

[英]Android Architecture Components ViewModel Context

我正在研究谷歌的架构组件,以便将ViewModel和LiveData实现到我的应用程序,官方文档说:

注意:由于ViewModel比特定活动和片段实例更长,因此它永远不应引用View或任何可能包含对活动上下文的引用的类。 如果ViewModel需要Application上下文(例如,查找系统服务),它可以扩展AndroidViewModel类并具有在构造函数中接收Application的构造函数(因为Application类扩展了Context)

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

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组件。 我有点不知道如何解决这个问题,我愿意接受任何建议。

提前致谢

AndroidViewModel类作为android.arch.lifecycle包的一部分提供,该包是Android的架构组件的一部分。 它本身要求将Application Context传递给构造函数。 应用程序上下文贯穿于Activity生命周期。

ViewModel中的Application上下文是可以的,因为Application上下文与整个Application生命周期相关联,而不是与Activity生命周期相关的Activity上下文。

ViewModel文档具体是指不使用Activity Context,但是Application Context如果没用的话。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM