LiveData基本使用

LiveData 基本使用

一、说明
  1. 基于观察者模式的消息订阅/分发组件,具有宿主生命周期感知能力,因此可以确保LiveData仅分发消息给处于活跃状态的观察者;
  2. 作用:减少资源占用–页面不可见时不会派发消息;
  3. 确保页面始终保持最新状态–页面活跃时,会立刻派发最新的一条消息给所有观察者;
  4. 不再需要手动处理生命周期–避免NPE;
  5. 可以打造不用反注册,不会内存泄漏的消息总线–取代eventbus。
二、使用
  1. 添加依赖
    在官网找合适版本的依赖。

  2. 自定义 LiveData,也可使用系统提供的 MutableLiveData<>

public class MyLiveData extends LiveData<String> {

    //单例
    private MyLiveData(){}
    private static class Instance{
        private static MyLiveData instance = new MyLiveData();
    }
    public static MyLiveData getInstance() {
        return Instance.instance;
    }
    //数据
    private String text = "Livedata";

    public String getText() {
        return text;
    }
    //数据修改时发布消息
    public void setText(String text) {
        this.text = text;
        //消息发送,setValue(T value) 也可
        postValue(text);
    }
}
  1. 在任意地方对自定义的 LiveData 添加观察者
MyLiveData liveData = MyLiveData.getInstance();
liveData.observe(this, new Observer<String>() {
    @Override
    public void onChanged(String s) {
            Log.i("TAG","数据已经改变。");
        }
    });
  1. 在任意地方对自定义的 LiveData 进行数据修改
MyLiveData liveData = MyLiveData.getInstance();
liveData.setText("新的数据");
  1. 所有注册了观察者的onChanged 会被回调。
三、补充
  1. 由于注册了观察者的只有一个对象,所以该类可以设计为单例,非单例需要注意注册的对象状态。
  2. 与 ViewModel 搭配使用,在 ViewModel 中长期保存单个对象,并且所有生命周期都可以对数据进行获取。当修改时也可以对活跃的观察者进行消息分发,这就不需要设计为单例。
  3. 使用 MutableLiveData 的话,使用 LiveData.post(T value) 发送消息即可。
四、注意
  1. 粘性事件:消息分发有版本控制,version 的字段记录了数据变化的次数,初始值 -1。若添加观察者时 version 已经 >0 ,则会自动进行版本同步,发送每次数据变化的内容进行回调。version 在 LiveData 和 Observer 皆有。
    处理办法:注册时将自己的 lastVersion 设置与 LiveData 的 mVersion 相同的值即可。
  2. 观察者 onChange() 触发:
    • 粘性事件,version 不同触发。
    • 观察者生命周期变化触发。
    • 数据变化,postValue() 或 setValue() 触发。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kotlin LiveData 是用于 Android 开发的一个特性,它是一个发布-订阅模式的数据源。LiveData 允许你创建可以被观察(即订阅)的数据对象,从而让你的组件知道数据何时发生变化。这使得数据更新更加透明,并且可以轻松地将数据传递给依赖它的组件。 使用 Kotlin LiveData基本步骤如下: 1. 创建一个 LiveData 对象:LiveData 对象是你想要发布的数据的公共视图。你可以将任何可变的、可观察的数据(如变量、属性或对象)封装在 LiveData 对象中。 ```kotlin val liveData = MutableLiveData<Int>() ``` 2. 将数据设置为 LiveData 对象:你可以通过调用 LiveData 对象的 set 方法将数据发布出去。 ```kotlin liveData.value = 42 ``` 3. 将 LiveData 对象传递给依赖它的组件:你可以将 LiveData 对象传递给任何需要它的组件,如 ViewModel 或 Activity/Fragment。这样,当 LiveData 中的数据发生变化时,所有订阅该数据的组件都会收到通知。 4. 使用观察者更新 UI:一旦你订阅了 LiveData 对象,你就可以在 UI 中使用观察者来更新 UI。当数据发生变化时,UI 将自动更新。 LiveData 的优点包括: * 它提供了一种简单的方法来处理数据更新,使得组件之间的通信更加清晰和一致。 * 它允许你将数据传递给任何需要它的组件,而无需手动复制或传递数据。 * 它支持多线程操作,可以在异步操作中安全地更新 LiveData 对象。 需要注意的是,LiveData 是用于在后台线程中维护数据的,并且不能被外部观察者修改。因此,如果你需要修改数据并通知外部观察者,你可能需要使用其他方法,如使用 ViewModel 或其他观察者模式实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值