簡體   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