kotlin MutableLiveData 工作流程及原理

2023-07-04  本文已影响0人  coke613

MutableLiveData 它是Android Jetpack 架构组件中的一部分,用于在组件(如 Activity、Fragment、ViewModel 等)之间传递和共享数据。它是一种基于观察者-订阅者模式的数据持有类.

MutableLiveData工作原理
  • a. 观察者(Observer): 观察者是一个对象,它监听被观察对象的变化,并在变化时接收通知.在Android 中,通常是ui组件如(Activity,Fragment) 充当观察者,它们可以订阅并接收被观察者对象的变化.
  • b. 被观察者(Observable):被观察者是一个对象,它持有数据并在数据发生变化时通知观察者.在Android中 'MutableLiveData' 就是一种被观察者对象,它可以持有数据,并在数据发生变化的时候通知所有观察者.
MutableLiveData 执行流程
// 在 ViewModel 中
val data = MutableLiveData<String>()

// 在 ViewModel 中 更新数据
fun updateData(newData: String) {
    data.value = newData
}

// 在 Activity 中订阅数据变化
viewModel.data.observe(this, Observer { value ->
    // 处理数据变化,更新 UI 等操作
})

MutableLiveData是LiveData 的子类,具有可变的特性,可以通过调用setValue()或者postValue()方法来更新数据.

setValue, postValue 有什么区别.

setValue()和postValue()是MutableLiveData类中用于更新数据的两种方式.它们在使用方式和线程安全性方面略有不同.

区别总结如下:
  • setValue()方法必须在主线程中调用,立即分发数据更新给观察者.
  • postValue()方法可以在任何线程中调用,将数据更新操作添加到消息队列中,确保在主线程上进行数据分发.
// 在 ViewModel 中
val data = MutableLiveData<String>()

// 在 ViewModel 中 更新数据  确保在主线程调用
fun updateData(newData: String) {
    data.value = newData
}

//在 ViewModel 子线程中更新数据.
fun postUpdateData(newData: String){
    Thread{
        data.postValue(newData)
    }.start()
}


// 在 Activity 中订阅数据变化
viewModel.data.observe(this, Observer { value ->
    // 处理数据变化,更新 UI 等操作
})

上一篇下一篇

猜你喜欢

热点阅读