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

 

本文默认读者已经学习了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() {
            @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 : 对状态的持有和维护

你可能感兴趣的:(Android 官方架构组件 LiveData:你想要的观察者模式)