Kotlin Coroutines中是否有RxJava Subject的类似物?

问题描述 投票:1回答:1

[2020年,许多Android开发人员都在谈论Kotlin Coroutines。我正在尝试了解它以及协程如何在我的项目中为我提供帮助。

所以我的问题是:协程中是否有RxJava主题的类似物?PublishSubject的最低要求。

我想要的-我使用PublishSubject将事件从ViewModel发送到我的View。我在onStart()方法上订阅eventsSubject并在onStop()方法上进行处置。

因此,对Kotlin协程类似物的最低要求是:

  • 简单的测试(我使用TestSubscriber,它非常棒)
  • 我想发送事件而不缓冲
  • 易于订阅/取消订阅

有我的用例示例:

ViewModel:

abstract class AbsStateViewModel<State, Event> : AbsViewModel() {
    private val stateSubject = BehaviorSubject.create<State>()
    private val eventSubject = BehaviorSubject.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)
    }
}

和用法:

viewModel.getEventObservable() // called on onAttach()
            .subscribe(
                    this::handleEvent,
                    this::defaultHandleException
            )
            .disposeOnDetach() // my extensions 
android kotlin rx-java2 coroutine kotlin-coroutines
1个回答
0
投票

是的,在协程中有类似接收主题,即通道。如果要重现PublishSubject的行为,可以使用BroadcastChannel,否则,如果要重现BehaviorSubject的行为,可以使用ConflatedBroadcastChannel

© www.soinside.com 2019 - 2024. All rights reserved.