jul*_*iro 11 android viewmodel android-context android-application-class android-livedata
我正在研究谷歌的架构组件,以便将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());
}
Run Code Online (Sandbox Code Playgroud)
我应该在活动中正常实例吗?
val viewModel2 = ViewModelProviders.of(this).get(ViewModelTest::class.java)
viewModel2.test()
Run Code Online (Sandbox Code Playgroud)
不是很糟糕吗?要在需要访问SharedPreferences或需要上下文的任何内容时使用此应用程序变量?如果是,我应该避免在ViewModel上使用它并仅在视图上使用它吗?特别是如果我想用一个需要上下文的值更新UI组件.我有点不知道如何解决这个问题,我愿意接受任何建议.
提前致谢
AndroidViewModel类作为android.arch.lifecycle软件包的一部分提供,该软件包是Android体系结构组件的一部分。它本身需要传递到构造函数中的Application Context。应用程序上下文遍历活动生命周期。
ViewModel中的Application上下文是可以的,因为Application上下文绑定到整个Application生命周期,而不是Activity上下文绑定到Activity生命周期。
ViewModel文档专门指的是不使用活动上下文,而是使用应用程序上下文(如果可以)。
| 归档时间: |
|
| 查看次数: |
7291 次 |
| 最近记录: |