LiveData的回掉时机

通常我们可能会说LiveData的值更新只有在界面可见的时候才会回掉其观察者类,然而这是不严谨的,对于不知道具体回掉时机的人而言,这么描述可能产生误解。
下面我们来具体说一下LiveData的回掉时机:
官方文档这么描述的:

LiveData considers an observer, which is represented by the Observer class, to be in an active state if its lifecycle is in the STARTED or RESUMED state. LiveData only notifies active observers about updates. Inactive observers registered to watch LiveData objects aren’t notified about changes.

也就是说LiveData 的值发生变化的回调时机是页面在STARTED或RESUMED状态,他并不会在意页面是否真的可见,比如你在一个activity界面中加入了一个fragment界面,在这个fragment里面有一个对LiveData的观察者,在这个Activity显示出来后,你又因为某些原因把这个fragment所在的view隐藏了(设置了Visibility为GONE或INVISIBLE),实际上这个时候并没有调用fragment的onStop或onPause方法,也就是说这个fragment在这个时候的状态依然是RESUMED,虽然从我们视觉角度看来这个fragment是不可见的,但LiveData如果发生变化,依然会回调这个Fragment的观察者。

LiveData的生命周期感知能力只是因为它实现了LifecycleObserver接口,并且我们注册观察者的时候传递了lifecycleOwner,所以他可以监听到所传来的lifecycleOwner的生命周期的变化,但可见性的变化并不包含在生命周期的变化,所以即使视觉上不可见依然可能会回调其观察者的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LiveData 是用于在 Android 应用程序中观察数据的一个组件。LiveData 是一个可观察的数据持有者类,它具有生命周期感知能力,因此它会自动管理它与 Activity 和 Fragment 生命周期的关系,从而可以避免内存泄漏和崩溃。 LiveData 的一个重要特性是它可以通知观察者数据已更改。当 LiveData 的值发生更改时,它会自动通知所有观察者。这意味着您无需手动更新 UI 或执行其他操作以反映数据更改。LiveData 还支持数据转换和过滤,因此您可以将原始数据转换为 UI 可以直接使用的格式。 LiveData 使用观察者模式进行数据监听,您可以使用 `observe()` 方法将观察者添加到 LiveData 实例中,该方法需要传入一个 LifecycleOwner 和一个 Observer 对象。LifecycleOwner 表示 LiveData 与哪个组件的生命周期绑定,通常是 Activity 或 Fragment。Observer 对象定义了当 LiveData 的值更改时要执行的操作。 下面是一个简单的示例,演示如何使用 LiveData 监听数据更改: ``` // 创建一个 LiveData 实例 val myLiveData = MutableLiveData<String>() // 将观察者添加到 LiveData 实例中 myLiveData.observe(this, Observer { newValue -> // 在这里更新 UI 或执行其他操作 textView.text = newValue }) // 更改 LiveData 的值 myLiveData.value = "Hello World" ``` 在上面的示例中,我们创建了一个名为 `myLiveData` 的 LiveData 实例,并将其与当前组件的生命周期绑定。我们还将一个 Observer 对象传递给 `observe()` 方法,以便在 LiveData 的值更改时执行操作。当我们调用 `myLiveData.value = "Hello World"` 时,LiveData 会自动通知所有观察者,以便更新 UI 或执行其他操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值