LiveData详细分析2

  一:LiveData是什么东西
1.基于观察者设计模式
LiveData是一种持有可被观察数据的类(被观察者)。LiveData需要一个观察者对象,一般是Observer类的具体实现。当观察者的生命周期处于STARTED或RESUMED状态时,LiveData会通知观察者数据变化。
2.LiveData能够感知activities/fragments/services生命周期
LiveData能够感知当activities/fragments/ services生命周期处于活跃状态(STARTED和RESUMED)时,才会通知这些组件更新数据变化。
3.LiveData能够自动解除数据订阅

二:LiveData的优点缺点
 优点:
1UI和实时数据保持一致
 因为LiveData采用的是观察者模式,这样一来就可以在数据发生改变时获得通知,更新UI。
2不会发生内存泄露
 观察者被绑定到组件的生命周期上,当被绑定的组件销毁(onDestroy)时,观察者会立刻自动清理自身的数据。
3不会再产生由于Activity处于stop状态而引起的崩溃
    例如:当Activity处于后台状态时,是不会收到LiveData的任何事件的。
4不需要再解决生命周期带来的问题
 LiveData可以感知被绑定的组件的生命周期,只有在活跃状态才会通知数据变化。
5实时数据刷新
  当组件处于活跃状态或者从不活跃状态到活跃状态时总是能收到最新的数据
6数据共享
 如果对应的LiveData是单例的话,就能在app的组件间分享数据。这部分详细的信息可以参考继承LiveData

 缺点:

三:LiveData的使用步骤
⒈创建一个持有某种数据类型的LiveData (通常是在ViewModel中)
⒉创建一个定义了onChange()方法的观察者。这个方法是控制LiveData中数据发生变化时,采取什么措施 (比如更新界面)。通常是在UI Controller (Activity/Fragment) 中创建这个观察者。
⒊通过 observe()方法连接观察者和LiveData。observe()方法需要携带一个LifecycleOwner类。这样就可以让观察者订阅LiveData中的数据,实现实时更新。


四:LiveData与MutableLiveData区别
LiveData与MutableLiveData的其实在概念上是一模一样的.唯一几个的区别如下:
MutableLiveData的父类是LiveData
LiveData在实体类里可以通知指定某个字段的数据更新.
MutableLiveData则是完全是整个实体类或者数据类型变化后才通知.不会细节到某个字段


五:LiveData 的 observe()和observerForever()区别
  observe():当数据更新后,LiveData 会通知它的所有活跃的观察者(例如 Activity 位于 Destroyed 状态时是不活跃的,因此不会收到通知)。
observerForever() :不会受到 Activity 等组件的生命周期的影响,只要数据更新就会收到通知。

六:


LiveData常见使用场景
   1.单独使用LiveData

首先创建一个 MutableLiveData(LiveData是抽象类)对象 ,通过 observe 方法可以订阅修改数据的通知,通过 postValue()或者 setValue() 方法发送事件更新数据,已经订阅的 Observer 能够得到数据更改的通知,就会回调 onChanged() 方法。

liveData = new MutableLiveData<>();
liveData.observe(this, new Observer<String>() {
    @Override
    public void onChanged(@Nullable final String newText) {
        // 更新数据
        tv3.setText(newText);
    }
});
liveData.setValue("小杨真的是一个逗比么");
 

2. LiveData配合ViewModel使用

private  TextViewModel model ;
 private void initLiveData() {
    //  创建ViewModel对象
    model = ViewModelProviders.of(this).get(TextViewModel.class);
    // 创建一个定义了onChange()方法的观察者对象nameObserver 
    // 开始订阅
    final Observer<String> nameObserver = new Observer<String>() {
        @Override
        public void onChanged(@Nullable final String newText) {
            // 更新数据
            tvText.setText(newText);
        }
    };
    //创建LiveData对象
     MutableLiveData<String>  mCurrentTextLiveData= model.getCurrentText();
    // 通过 observe()方法连接观察者和LiveData,注意:observe()方法需要携带一个LifecycleOwner类
   mCurrentTextLiveData .observe(this, nameObserver);
}

 LiveData是一个数据的包装。具体的包装对象可以是任何数据,包括集合。它是一个抽象类,首先先创建一个类实现LiveData。

public class TextViewModel extends ViewModel {

    /**
     * LiveData是抽象类,MutableLiveData是具体实现类
     */
    private MutableLiveData<String> mCurrentText;

    public MutableLiveData<String> getCurrentText() {
        if (mCurrentText == null) {
            mCurrentText = new MutableLiveData<>();
        }
        return mCurrentText;
    }

}


https://mp.weixin.qq.com/s/kcd0T3zwnfXA9b6_L2lzjA

https://mp.weixin.qq.com/s/MGjK0mXUmmW1P-u6vbGjLA

  • 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、付费专栏及课程。

余额充值