我可能在 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。