安卓进阶LiveData

Posted nicojerry

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓进阶LiveData相关的知识,希望对你有一定的参考价值。

最近参与到后端的工作中,虽然以前在工作中使用过php,但是这次使用的是Java,开发思路和方式有所不同。后端开发中,做接口也是需要处理大量的业务逻辑关系,同时一些事务之类的技术因素也要考虑好,在架设项目的时候就已经考虑好手动控制事务,Dao与Service层的方法都有Connection对象传入,用作事务控制。数据库连接池也是很重要,不然每次重新获取数据库连接对象也是一个耗时操作,数据库连接池使用c3p0。

 

LiveData简介

LiveData是Jetpack的Architecture部分的一个类,它是一个数据容器。简单来说,他是一个泛型类,能在内部持有一个泛型类型对象的实例,可以对其添加监听器,当我们调用更新数据的方法,所有的监听器都能收到回调。

 

听起来好像没什么特点,但是先来看看LiveData的最优秀的两个特性。

 

1. 添加的监听器自动绑定生命周期,当Activity、Fargment的生命周期结束的时候,LiveData对象自动销毁监听器。

2.当绑定的生命周期进入暂停的时候,监听器不会收到回调,当生命周期重新进入的时候,监听器会再次收到回调。

 

MutableLiveData

MutableLiveData是实现了LiveData抽象类的类,其实并没有增加任何功能。

public class MutableLiveData<T> extends LiveData<T> {
    @Override
    public void postValue(T value) {
        super.postValue(value);
    }

    @Override
    public void setValue(T value) {
        super.setValue(value);
    }
}

 

添加监听器

添加监听器目的就是为了随时获取最新值变化的回调,下面看看代码示例。

MutableLiveData<String> liveData = new MutableLiveData<>();
liveData.observe(mFragment, new Observer<String>() {
    @Override
    public void onChanged(@Nullable String o) {
        Log.e("LiveData:", o);
    }
}); 

LiveData.observe(@NonNull LifecycleOwner owner, @NonNull Observer<T> observer)方法需要LifecycleOwner是接口实例参数,Fragment、Activity已经实现此接口。

 

更新数据

当我们添加了监听器,任何时候我们可以更新LiveData里面的数据,其他监听器就会收到回调。

// 在主线程中使用 
void setValue (T value) 

// 在工作线程中使用
void postValue (T value) 

 

以上是关于安卓进阶LiveData的主要内容,如果未能解决你的问题,请参考以下文章

在我旋转屏幕之前,LiveData 不会加载到片段中

LiveData 没有观察具有共享视图模型的子视图页面片段

Android kotlin 系列讲解(进阶篇)Jetpack系列之LiveData

Android MVVM:具有多个片段的活动 - 将共享 LiveData 放在哪里?

从没有中间转换变量的片段中观察 ViewModel LiveData

使用 ViewModel 和 LiveData 递增变量的简单片段示例 - 变量始终为空