AndroidViewmodel

weixin_33860722發表於2018-08-20
Lifecycles 生命週期

生命週期元件是 Android 官方架構元件中的核心元件, 它可以使各種例項作為觀察者與 Activity 和 Fragment 等具有生命週期特性的元件繫結在一起, LiveData 和 ViewModel 都是基於此元件, 簡而言之就是, 你將需要繫結生命週期的例項註冊給該元件, 該元件就會在你指定的某個生命週期方法執行時通知這個例項

幾個重要的類

  • LifecycleObserver介面( Lifecycle觀察者):實現該介面的類,通過註解的方式,可以通過被LifecycleOwner類的addObserver(LifecycleObserver o)方法註冊,被註冊後,LifecycleObserver便可以觀察到LifecycleOwner的生命週期事件。

  • LifecycleOwner介面(Lifecycle持有者):實現該介面的類持有生命週期(Lifecycle物件),該介面的生命週期(Lifecycle物件)的改變會被其註冊的觀察者LifecycleObserver觀察到並觸發其對應的事件。

  • Lifecycle(生命週期):和LifecycleOwner不同的是,LifecycleOwner本身持有Lifecycle物件,LifecycleOwner通過其Lifecycle getLifecycle()的介面獲取內部Lifecycle物件。

  • State(當前生命週期所處狀態)

  • Event(當前生命週期改變對應的事件):如圖所示,當Lifecycle發生改變,如進入onCreate,會自動發出ON_CREATE事件。

  • observer類中,使用OnLifecycleEvent註解新生成的類

    • 在build-> intermediates->exploded-aar->對應的module下
    • 事件發生變化後會呼叫sync()方法,同步通知observer中的狀態
LiveData

LiveData是一個可觀察的資料持有者類。與常見的觀察者不同,LiveData是有生命週期感知的。這意味著它尊重其他應用程式元件的生命週期,比如Activity、Fragment或Service。這種感知確保LiveData只更新處於生命週期狀態內的應用程式元件。

ViewModel

ViewModel 有兩個功能, 第一個功能可以使 ViewModel 以及 ViewModel 中的資料在螢幕旋轉或配置更改引起的 Activity 重建時存活下來, 重建後資料可繼續使用, 第二個功能可以幫助開發者輕易實現 Fragment 與 Fragment 之間, Activity 與 Fragment 之間的通訊以及共享資料

使用
  1. 通過建立MyViewmodel extends AndroidViewModule
  2. 內部新建MutableLiveData<T> 建立可監聽資料
  3. 通過context獲取到viewmodule 新增監聽 viewmodule.liveData.observer()

轉自改造 Android 官方架構元件 ViewModel
轉自Lifecycle詳解&原理分析