我可能遇到过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。