В 2020 году многие android разработчики говорят о Kotlin сопрограммах. Я пытаюсь понять это и как сопрограммы могут помочь мне в моем проекте.
Итак, мой вопрос: есть ли аналог в сопрограммах для Rx Java Предметы? (Как минимум для PublishSubject
).
Что я хочу - я использую PublishSubject
для отправки событий с ViewModel
на View
. Я подписываюсь на eventsSubject по методу onStart()
и располагаю по методу onStop()
.
Итак, минимальные требования для Kotlin аналога сопрограмм:
- Простое тестирование (я использую TestSubscriber и это здорово)
- Я хочу отправлять события без буферизации
- Легко подписаться / отписаться
Вот пример моего варианта использования:
ViewModel:
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)
}
}
И использования:
viewModel.getEventObservable() // called on onAttach()
.subscribe(
this::handleEvent,
this::defaultHandleException
)
.disposeOnDetach() // my extensions