作为MediatorLiveData的源添加的LiveData不会进入非活动状态

时间:2017-09-20 14:47:41

标签: android android-architecture-components android-livedata

我可能遇到过MediatorLiveData源行为中的错误。如果将LiveData作为源添加到MediatorLiveData,然后在观察者中再次将其删除,则源LiveData将重新进入活动状态,即使不再有注册到它的观察者:

MutableLiveData<String> stringData = new MutableLiveData<String>() {
    @Override
    protected void onActive() {
        super.onActive();
        System.out.println("stringData onActive()");
    }

    @Override
    protected void onInactive() {
        super.onInactive();
        System.out.println("stringData onInactive");
    }
};

MediatorLiveData<Integer> intData = new MediatorLiveData<>();

在您的LifecycleOwner中:

intData.addSource(stringData, s -> {
        System.out.println("stringData emitted " + s);
        intData.removeSource(stringData);
    });

// note the order here, value of the source LiveData is set before 
// observer gets registered:
stringData.setValue("blabla");
intData.observe(this, integer -> {});

输出:

System.out: stringData onActive()
System.out: stringData emitted blabla
System.out: stringData onInactive
System.out: stringData onActive()

这里发生了什么?我希望stringLiveData保持不活动状态?这是一个错误还是预期的行为?

有趣的是,如果在注册观察者之后调用stringData.setValue(),行为就像预期的那样(只有日志输出的前三行)。

我使用的是版本1.0.0 Alpha 9-1。

0 个答案:

没有答案