美文网首页
kotlin MutableLiveData 工作流程及原理

kotlin MutableLiveData 工作流程及原理

作者: coke613 | 来源:发表于2023-07-04 14:33 被阅读0次

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

MutableLiveData工作原理
    1. 数据存储: MutableLiveData 内部维护着一个数据对象.可以是任意类型.这个数据对象可以通过setValue()方法进行更新.
    1. 生命周期感知: MutableLiveData 与组件的生命周期相关联,它会在组件活跃状态下通知观察者(例如activity 或者 fragment),并在组件非活跃状态下自动取消通知.以防止潜在的内存泄露.
    1. 观察者模式: MutableLiveData 实现了观察者模式,允许其他组件注册为观察者并接收数据的更新通知.当数据发生变化时,注册的观察者将收到更新的数据.
      在观察者- 订阅者模式中,存在两个主要角色:
  • a. 观察者(Observer): 观察者是一个对象,它监听被观察对象的变化,并在变化时接收通知.在Android 中,通常是ui组件如(Activity,Fragment) 充当观察者,它们可以订阅并接收被观察者对象的变化.
  • b. 被观察者(Observable):被观察者是一个对象,它持有数据并在数据发生变化时通知观察者.在Android中 'MutableLiveData' 就是一种被观察者对象,它可以持有数据,并在数据发生变化的时候通知所有观察者.
  • 4.线程安全: MutableLiveData 保证数据更新操作是在主线程上进行的.这样可以确保观察者在主线程接受数据变化的通知,以便正确处理UI更新.
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(): 该方法是在主线程中调用的,用于更新MutableLiveData的值.这就意味着你只能在主线程中调用setValue(),否则会抛出异常.setValue()方法会立即将新的值分发给所有的观察者,即时当前线程是主线程.

  • postValue(): 该方法是线程安全的,可以在任何线程中调用,包括主线程和后台线程.它会将数据更新的操作添加到主线程的消息队列中,在主线程空闲时进行处理.这样可以确保数据的更新都是在主线程上进行.避免了跨线程访问的问题.

区别总结如下:
  • 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 等操作
})

相关文章

  • mybatis流程及工作原理

    mybatis面试题 http://www.2cto.com/database/201508/439359.htm...

  • JSP工作原理及执行流程

    JSP:全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态w...

  • SpringMVC执行流程及工作原理

    图解SpringMVC执行流程: 当然也有以下几种表示但是都是与第一种说法一样. 我们针对第一张图进行分析 组件说...

  • React Native原理及坑点总结

    一、React Native原理及流程介绍 (一)、RN前端调用native整体流程; js调native简单流程...

  • SSH 框架流程

    SSH三大框架的工作原理及流程 原地址(作者博客:http://www.1314sl.com) Hql:1、 属性...

  • kotlin

    Kotlin 扩展函数及原理[https://www.jianshu.com/p/314cdb1603fc] Ko...

  • Git学习笔记(一)

    本文主要分为以下几个方面: Git简介 Git工作流程及原理 Git基本操作 Git分支管理 Github远程仓库...

  • jvm工作原理详解

    参考:1 JVM 工作原理和流程

  • Kotlin学习之流程控制

    Kotlin学习之流程控制 @(Kotlin学习) Kotlin的流程控制,可以分为条件语句和循环语句。 一、条件...

  • SpringMVC工作原理

    原文链接: SpringMVC工作原理作者:平凡希SpringMVC的工作原理图: SpringMVC流程 1、 ...

网友评论

      本文标题:kotlin MutableLiveData 工作流程及原理

      本文链接:https://www.haomeiwen.com/subject/rtzcudtx.html