LiveData使用

一、什么是LiveData。

LiveData 是可观察的数据持有者类。与常规的可观察对象不同,LiveData具有生命周期感知功能,这意味着它尊重其他应用程序组件(例如活动,片段或服务)的生命周期。这种意识确保LiveData仅更新处于活动生命周期状态的应用程序组件观察者。
如果LiveData的Observer生命周期处于STARTEDor RESUMED 状态,则它认为由类表示的观察者 处于活动 状态。LiveData仅将有关更新的信息通知活动的观察者。LiveData未注册观察对象的不活动观察者 不会收到有关更改的通知。

您可以注册一个与实现该LifecycleOwner 接口的对象配对的观察者 。这种关系允许在相应Lifecycle对象的状态更改 为时删除观察者 DESTROYED。这对于活动和碎片特别有用,因为它们可以安全地观察LiveData对象,而不必担心泄漏-活动和碎片在其生命周期被破坏时会立即取消订阅。

二、使用LiveData的优点

1、确保您的用户界面与数据状态匹配
LiveData遵循观察者模式。Observer生命周期状态更改时,LiveData会通知 对象。您可以合并代码以更新这些Observer对象中的UI 。观察者可以在每次更改应用程序时更新UI,而不是在每次应用程序数据更改时都更新UI。(其实说的是activity处于不可见状态时就不进行数据更新,而是等它可见时再更新)
2、没有内存泄漏
观察者绑定到 Lifecycle对象,并在其相关的生命周期被破坏时自行清理。
3、活动停止不会导致崩溃
如果观察者的生命周期处于非活动状态(例如在后堆栈中处于活动状态),则它不会收到任何LiveData事件。
4、不再需要人工生命周期处理
UI组件仅观察相关数据,而不会停止或继续观察。LiveData自动管理所有这些,因为它在观察的同时知道相关生命周期状态的变化。
5、始终最新的数据
如果生命周期变为非活动状态,则在再次处于活动状态时它将接收最新数据。例如,在后台的活动返回到前台后立即接收最新数据。
6、正确的配置更改
如果由于配置更改(例如设备旋转)而重新创建活动或片段,则该活动或片段将立即接收最新的可用数据。
7、共享资源
您可以LiveData 使用单例模式扩展对象以包装系统服务,以便可以在您的应用程序中共享它们。该LiveData对象一次连接到系统服务,然后任何需要资源的观察者都可以监视该LiveData 对象。

三、使用LiveData对象

请按照以下步骤操作 LiveData对象:
1、创建一个实例LiveData来保存某种类型的数据。这通常在您的ViewModel类中完成 。
2、创建一个Observer 定义onChanged() 方法的对象,该 方法控制当LiveData对象的保留数据更改时发生的情况。通常,您可以Observer在UI控制器中创建对象,例如activity或fragment。
3、使用 方法将Observer对象附加到对象。该方法带有一个 对象。这会将对象订阅到该对象,以便通知更改。通常,您将对象附加在UI控制器中,例如活动或片段。
代码示例:

public class NameViewModel extends ViewModel {
    private MutableLiveData<String> currentName;

    public MutableLiveData<String> getCurrentName() {
        if (currentName == null) {
            currentName = new MutableLiveData<>();
        }
        return currentName;
    }
}

public class TestActivity extends AppCompatActivity {

    private NameViewModel nameViewModel;
    private TextView text;
    private int n;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        text = findViewById(R.id.text);
        text.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                n++;
                nameViewModel.getCurrentName().setValue("第" + n + "次点击");
            }
        });

        //获取viewModel
        nameViewModel = ViewModelProviders.of(this).get(NameViewModel.class);

        //创建用于更新UI的观察器
        Observer<String> nameObserver = new Observer<String>() {
            @Override
            public void onChanged(String s) {
                text.setText(s);
            }
        };

        //观察liveData
        nameViewModel.getCurrentName().observe(this, nameObserver);
    }
}

如上就是LiveData的简单使用,当然,我们肯定不会为了更新一个TextView而写这么一大顿代码,它的真正使用是配合着别的JetPack组件使用的比如Room组件等。也有人基于LiveData特性写出LiveDataBus来代替EventBus的等等。

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

余额充值