[2020年,许多Android开发人员都在谈论Kotlin Coroutines。我正在尝试了解它以及协程如何在我的项目中为我提供帮助。
所以我的问题是:协程中是否有RxJava主题的类似物?(PublishSubject
的最低要求。
我想要的-我使用PublishSubject
将事件从ViewModel
发送到我的View
。我在onStart()
方法上订阅eventsSubject并在onStop()
方法上进行处置。
因此,对Kotlin协程类似物的最低要求是:
有我的用例示例:
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
是的,在协程中有类似接收主题,即通道。如果要重现PublishSubject
的行为,可以使用BroadcastChannel
,否则,如果要重现BehaviorSubject
的行为,可以使用ConflatedBroadcastChannel
。