Android 官方架构组件 LiveData:你想要的观察者模式

本文介绍了Android LiveData,它是Google在2018年开发者大会上推出的架构组件之一,本质上是一个观察者模式,能自动解除订阅以防止内存泄漏。LiveData通过实现LifecycleObserver接口,能感知Activity的生命周期。文中提到了LiveData的使用方法,包括setValue和postValue的异同,以及在不同生命周期状态下的行为。结合ViewModel使用,LiveData能更好地保存和管理数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

本文默认读者已经学习了Lifecycle, (我的Lifecycle 讲解:Android官方架构组件    Lifecycle   让你再也不会忘记清空资源

现在我们来看看另外一个Google 在2018开发者大会上推出的一系列新的架构组件之一的--LiveData

是什么:

首先可以告诉大家,LiveData 的本质是一个观察者模式,不同于其他基于观察者模式的组件(Rxjava,EventBus)等,它能够自动解除订阅,从而更好地避免了内存泄漏,为什么它能够自动解除订阅呢?因为它的内部实现了LifecycleObserver 接口,所以它可以自动感知Activity 的生命周期,从而自动解除订阅,

这种设计非常巧妙——在我们初识 Lifecycle 组件时,总是下意识认为它能够对大的对象进行有效生命周期的管理(比如 Presenter),实际上,这种生命周期的管理我们完全可以应用到各个功能的基础组件中,比如大到吃内存的 MediaPlayer(多媒体播放器)、绘制设计复杂的 自定义View,小到随处可见的LiveData,都可以通过实现LifecycleObserver接口达到 感应生命周期并内部释放重的资源 的目的。

用法

关于LiveData 单独使用的方法:

首先,导入官方依赖:

compile 'android.arch.lifecycle:extensions:1.0.0
   stringMutableLiveData = new MutableLiveData<>();


        stringMutableLiveData.observe(this, new Observer<String>() {
            @Override
            public void onChanged(@Nullable String s) {
                tvText.setText(s);
            }
        });


    }

    @OnClick(R.id.bt)
    public void onViewClicked() {
        stringMutableLiveData.setValue("随机数字是" + (int) (Math.random() * 10 + 1));
    }

可以看出来,LiveData 的单独使用意义不大,当Activity 重置(比如说翻转屏幕时),它也不能保存里面的值(得配合ViewModel使用才可以 下篇文章讲到),这里我只告诉大家LiveData 的几个特性

1.LiveData 设置数据有两个方法,分别是 setValue 和 postValue,都可以更新livaData里的数据 ,区别是setValue必须在主线程执行,postValue可以在任意线程执行,是因为postValue利用Handler发送到主线程去更新数据

2.LiveData存在一个活跃状态, 只有在onStart()声明周期之后,onPause()之前的状态才会变更,是因为当Activity切换到后台之后,就不再监听了,如果还想监听的话,可以调用observerForever进行监听,但是通过调用这个方法进行监听的话,需要手动调用removeObserver(Observer)解除订阅

更多与ViewModel 结合的使用方法,请关注我的下一篇文章。

Android 官方架构组件 ViewModel : 对状态的持有和维护

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值