生命週期意味著從出生到死亡的循環,今天要來淺談什麼是生命週期,以下如有解釋不清或是描述錯誤的地方還請大家多多指教:
每個元件都有自己的生命周期,就如之前講到的 Activity 及 Fragment 以及之後會提到的 ViewModel 和 LiveData,我們可以透過取得每個 state 來執行我們要的行為,或是監聽資料變化來改動我們的介面,而因為每個元件有各自的生命週期,所以在執行工作時要將邏輯切分清楚,主要分成以下幾個區塊:
我們可以透過以下方式來取得現在生命狀態:
lifecycleOwner.getLifecycle().getCurrentState()
先設置 ViewModel 和 liveData 的 library,由於原先的 lifecycle-extensions 已經被淘汰了,必須分別針對要使用的元件新增 library:
dependencies {
def lifecycle_version = "2.5.1"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
}
在專案中主要會透過 view 本身的 lifecycleOwner 去監聽 LiveData,而 Activity 和 Fragment 取得 Owner 分別是 this
及 viewLifecycleOwner
// activity
viewModel.cityList.observe(this) {
// data update UI
}
// fragment
viewModel.cityList.observe(viewLifecycleOwner) {
// data update UI
}