传统的组件间的通信方式有Handler、BroadcastReceiver,Interface、EventBus等等方式实现,他们有自己适合的应用场景,也有各自的弊端。这里介绍新的组件通信同时LiveData,它是一个数据持有类,具有以下特点:
- 数据可以被观察者订阅
- 能够感知组件(Fragment、Activity、Service))的生命周期
- 组件处于active状态时,会通知观察者有数据更新
对于观察者模式,不妨先看一个自己模仿LiveData写的简单的例子,数据持有类:
public class JSLiveData {
//持有的数据
public Object data;
//观察者的注册表
List<JSObserver> observers;
public JSLiveData() {
this.observers = new ArrayList<>();
}
/**
* 将观察者添加到注册表
* @param observer
*/
public void addObserver(JSObserver observer) {
observers.add(observer);
}
/**
* 发送数据
* 触发接口回调
* @param obj
*/
public void postValue(Object obj) {
this.data = obj