android LiveData源码分析--源码阅读100天(2)

本文深入解析Android的LiveData,探讨其如何进行生命周期感知、更新事件的处理以及如何防止内存泄漏。LiveData作为JetPack的一员,通过生命周期感知确保UI与数据同步,避免内存泄漏,简化手动生命周期管理。文章详细分析了LiveData内部的工作原理,包括LifecycleBoundObserver在生命周期变化中的作用,以及数据更新和避免内存泄漏的关键机制。
摘要由CSDN通过智能技术生成

0.介绍

LiveData,同属于JetPack构建集合,根据文档描述LiveData是一个可观察的数据持有者类。与常规observable不同,LiveData是生命周期感知的,这意味着它尊重其他应用程序组件的生命周期,例如Activity,Fragment或Service。此感知确保LiveData仅更新处于活动生命周期状态的应用程序组件观察者。
优势(以下摘自google文档,google翻译了一下)
(1)确保您的UI符合您的数据状态
LiveData遵循观察者模式。生命周期状态更改时,LiveData会通知Observer对象。您可以合并代码以更新这些Observer对象中的UI。每次应用程序数据更改时,您的观察者都可以在每次更改时更新UI,而不是更新UI。
(2)没有内存泄漏
观察者绑定到Lifecycle对象并在其相关生命周期被破坏后自行清理。
由于停止活动而没有崩溃
如果观察者的生命周期处于非活动状态(例如,在后端堆栈中的活动的情况下),则它不会接收任何LiveData事件。
(3)不再需要手动生命周期处理
UI组件只是观察相关数据,不会停止或恢复观察。 LiveData自动管理所有这些,因为它在观察时意识到相关的生命周期状态变化。
(4)始终保持最新数据
如果生命周期变为非活动状态,则会在再次变为活动状态时接收最新数据。例如,后台活动在返回前台后立即收到最新数据。
(5)适当的配置更改
如果由于配置更改(例如设备轮换)而重新创建活动或片段,则会立即接收最新的可用数据。
(6)共享资源
您可以使用单例模式扩展LiveData对象以包装系统服务,以便可以在应用程序中共享它们。 LiveData对象连接到系统服务一次,然后任何需要该资源的观察者都可以只观看LiveData对象。

1.使用

class MainActivity : AppCompatActivity() {

    val curName: MutableLiveData<String> by lazy {

        MutableLiveData<String>()
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        curName.observe(this, Observer<String> {
            println("value is $it")
        })
        curName.value="old value"
    }

}

使用很简单,当MutableLiveData对象的value发生改变时会出发Observer

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值