Kotlin 协程中是否有 RxJava 主题的类似物?

Art*_*tem 5 android coroutine kotlin rx-java2 kotlin-coroutines

2020 年,很多安卓开发者都在谈论 Kotlin 协程。我试图理解它以及协程如何在我的项目中帮助我。

所以我的问题RxJava 主题的协程中是否有类似的东西?(作为最低要求PublishSubject)。

我想要什么-我用PublishSubject从发送事件ViewModel给我的View。我在onStart()方法上订阅 eventsSubject并在onStop()方法上处理。

所以 Kotlin Coroutines 模拟的最低要求是:

  • 易于测试(我使用 TestSubscriber,它很棒)
  • 我想在没有缓冲的情况下发送事件
  • 易于订阅/取消订阅

有我的用例示例:

视图模型:

abstract class AbsStateViewModel<State, Event> : AbsViewModel() {
    private val stateSubject = BehaviorSubject.create<State>()
    private val eventSubject = PublishSubject.create<Event>()

    protected val requireState: State
        get() = stateSubject.value!!

    fun getStateObservable(): Observable<State> = stateSubject

    fun getEventObservable(): Observable<Event> = eventSubject

    protected fun sendEvent(event: Event) {
        eventSubject.onNext(event)
    }

    protected fun setState(state: State) {
        stateSubject.onNext(state)
    }
}
Run Code Online (Sandbox Code Playgroud)

和用法:

viewModel.getEventObservable() // called on onAttach()
            .subscribe(
                    this::handleEvent,
                    this::defaultHandleException
            )
            .disposeOnDetach() // my extensions 
Run Code Online (Sandbox Code Playgroud)

小智 4

是的,在协程中,有类似 rx 主题的东西,即通道。如果您想重现 的行为, PublishSubject您可以使用 BroadcastChannelelse 如果您想重现 的行为, BehaviorSubject您可以使用 ConflatedBroadcastChannel