Android: Transformations.switchMap 快速调用时未触发

Android: Transformations.switchMap not triggered when quick call

我正在尝试学习 MVI。我正在更新转换开关映射正在观察的状态事件实时数据。这是在我的视图模型中。

fun setStateEvent(event: StateEvent) {
    Timber.d("SetStateEvent: [$event]")
    _stateEvent.value = event
}

val dataState: LiveData<DataState<CustomViewState>> = Transformations.switchMap(_stateEvent) { stateEvent ->
    Timber.d("Got state event [$stateEvent]")
    stateEvent?.let {
        handleStateEvent(it)
    }
}

现在在我看来,我正在尝试执行两个操作:

viewmodel.setStateEvent(CustomStateEvent.ActionOne())
viewmodel.setStateEvent(CustomStateEvent.ActionTwo())

这些是我的日志:

SetStateEvent: [CustomStateEvent$ActionOne]
SetStateEvent: [CustomStateEvent$ActionTwo]

Got state event [CustomStateEvent$ActionTwo]
...

出于某种原因,第一个正在获得 cancelled/ignored。我做错了什么?

LiveData 是一个状态持有者,它就是为这个目的而设计的。所以它保证了所有活跃的(其状态至少为STARTED)的观察者最终都会收到这个LiveData的最新值,但是所有的中间值都可以合并。如果您需要在不混淆的情况下传递所有发布的值,您应该使用另一个抽象 - 例如 kotlin channel.