iT邦幫忙

2022 iThome 鐵人賽

DAY 17
0
Mobile Development

【Kotlin Notes And JetPack】Build an App系列 第 17

Day 17.【Architecture】Lifecycle 的介紹與應用

  • 分享至 

  • xImage
  •  

生命週期意味著從出生到死亡的循環,今天要來淺談什麼是生命週期,以下如有解釋不清或是描述錯誤的地方還請大家多多指教:

什麼?

每個元件都有自己的生命周期,就如之前講到的 Activity 及 Fragment 以及之後會提到的 ViewModel 和 LiveData,我們可以透過取得每個 state 來執行我們要的行為,或是監聽資料變化來改動我們的介面,而因為每個元件有各自的生命週期,所以在執行工作時要將邏輯切分清楚,主要分成以下幾個區塊:

  • UI (Activity or Fragment) 介面顯示與操作,透過 LiveData 及 lifecyclerOwner 來決定要開始監聽資料的時間點,確保在介面已經死亡時不會有資料再傳遞過來
  • Logic (ViewModel) 接收資料並轉化成畫面所需要的樣子,透過 LiveData 傳遞給介面所需資訊,勿傳入 view 的 context 到 ViewModel,不然 View 在銷毀時無法完全的死亡,property 有可能無法被 GC 而造成 memory leak
  • Data (Repository or Room) 拿取資料與對資料做操作

我們可以透過以下方式來取得現在生命狀態:

lifecycleOwner.getLifecycle().getCurrentState()

如何?

| Set up

先設置 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"
}

| Start up

在專案中主要會透過 view 本身的 lifecycleOwner 去監聽 LiveData,而 Activity 和 Fragment 取得 Owner 分別是 thisviewLifecycleOwner

// activity
viewModel.cityList.observe(this) {
		// data update UI
}

// fragment
viewModel.cityList.observe(viewLifecycleOwner) {
		// data update UI
}

Reference

lifecycle
lifecycle2


上一篇
Day 16.【UI】Recyclerview 的介紹與應用
下一篇
Day 18.【Architecture】ViewBinding 的介紹與應用
系列文
【Kotlin Notes And JetPack】Build an App30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言