Android Kotlin合作项目中是否有RxJava主题的类似项目?

Android Kotlin合作项目中是否有RxJava主题的类似项目?,android,kotlin,rx-java2,coroutine,kotlin-coroutines,Android,Kotlin,Rx Java2,Coroutine,Kotlin Coroutines,2020年,很多android开发者都在谈论Kotlin协同程序。我试图理解它,以及协同程序如何在我的项目中帮助我 因此,我的问题是:RxJava主题的协同程序中是否存在类似物?(至少对于PublishSubject) 我想要的-我使用PublishSubject将事件从ViewModel发送到我的View。我在onStart()方法上订阅EventsObject,并在onStop()方法上处理 因此,Kotlin公司的最低要求是: 简单的测试(我使用TestSubscriber,非常棒) 我

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

因此,我的问题是:RxJava主题的协同程序中是否存在类似物?(至少对于
PublishSubject

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

因此,Kotlin公司的最低要求是:

  • 简单的测试(我使用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)
    }
}

是的,在协同程序中,有类似于rx受试者的通道。如果要重现
PublishSubject
的行为,可以使用
BroadcastChannel
,否则如果要重现
BehaviorSubject
的行为,可以使用
ConflatedBroadcastChannel

AFAIK a
频道
主题
的典型替代品,尤其是在这种情况下。或者,使用
LiveData
,就像您在这里所做的那样,为更深层次(viewmodel repository等)保留协同程序/RxJava。默认情况下,LiveData存储最后一项(如行为主题),我不喜欢LiveData的解决方法。我使用LiveData表示状态(订阅viewModel时,view需要获取当前状态),我正在寻找主题替换,但仍然没有看到。然后,使用
频道
。下面是一组主题实现镜像RxJava实现:您找到示例解决方案了吗?我也在想同样的问题。是的,但它仍然在@ExperimentalRoutinesAPI下(您可以提供如何从视图订阅和取消订阅频道的示例吗?请记住,事件计数可以从0到N,所以我不知道事件计数是的,我知道,我正在等待kotlin的下一个发行版使用它们。您可以在ui中与lifecycleScope一起使用它们:
lifecycleScope.launch{for(频道中的值){…Do something}
lifecycleScope
会在ui关闭时自动关闭频道。
viewModel.getEventObservable() // called on onAttach()
            .subscribe(
                    this::handleEvent,
                    this::defaultHandleException
            )
            .disposeOnDetach() // my extensions