Android Kotlin合作项目中是否有RxJava主题的类似项目?
2020年,很多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,非常棒) 我
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