[英]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.