iT邦幫忙

2021 iThome 鐵人賽

DAY 17
0
Mobile Development

Kotlin Android 30天,從 0 到 ML (Machine Learning)系列 第 17

Kotlin Android 第17天,從 0 到 ML - MVVM架構 - LiveData

前言:

   學會了ViewModel,接下來就是建立觀察 LiveData。

大綱 :

LiveData

   是一個 observable data holder class 類別。
   LiveData 僅在數據更改時才提供更新,並且僅向活動的觀察者提供更新,並配合觀察者的生命週期。
   建議是配合ViewModel一起使用。
   

LiveData優點:

    1.確保您的 UI 與您的數據狀態匹配 (LiveDataObserver在底層數據發生變化時通知 對象)
    2.沒有內存洩漏 (觀察者綁定到 Lifecycle對象並在其關聯的生命週期)
    3.不會因活動停止而崩潰(觀察者的生命週期處於非活動狀態,不會收到任何 LiveData 事件)
    4.不再需要手動生命週期處理(LiveData 會自動管理)
    5.始終保持最新數據(生命週期改變會在再次接收最新數據)
    6.正確的配置更改(例如設備旋轉)
    7.共享資源(使用單例模式擴展對象來包裝系統服務)

開始動手吧
在App build.gradle,加元件庫

   dependencies {
     implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1"
     implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1"
   }

在ViewModel中,建立LiveData

   // Create a LiveData with a Type
   var mTitle = MutableLiveData<String>()

在Activity中,Observe LiveDtat

   viewModel.mTitle.observe(owner:this){ it:String
        dayTitle.text = it
   }
   

在ViewModel中,LiveData更新

      mTitle.postValue("Kotlin Android 第17天,從 0 到 ML -- LiveData")
      
  ** 可使用setValue(T) 和 postValue(T).
  ** setValue(T)是執行在 Main Thread (UI)
  ** postValue(T) 是執行在 Worker Thread (Backgroud)       
      

範例:

   Activity 原本顯示"Kotlin Android 30天,從 0 到 ML" ,LiveData Delay 1s , 
   更新"Kotlin Android 第17天,從 0 到 ML -- LiveData",Activity收到更新文字就更新顯示內容
  

執行結果:
https://ithelp.ithome.com.tw/upload/images/20210922/20121643lk571m81ye.jpg
https://ithelp.ithome.com.tw/upload/images/20210922/20121643BWeef3L6Tf.jpg

參考:

https://developer.android.com/topic/libraries/architecture/livedata


上一篇
Kotlin Android 第16天,從 0 到 ML - MVVM架構 - ViewModel
下一篇
Kotlin Android 第18天,從 0 到 ML - View Binding
系列文
Kotlin Android 30天,從 0 到 ML (Machine Learning)30

尚未有邦友留言

立即登入留言