Я хочу кэшировать следующие наблюдаемые
val currentUser: Observable<User>
get() = Observable.create { emitter ->
...
}
Поскольку наблюдаемая, возвращаемая create, статична, я не могу просто вызвать для нее cache. Причина, по которой я это делаю, заключается в том, что наблюдаемый объект доступен в разных частях приложения, и я хочу, чтобы он немедленно возвращал последнее значение, вместо того, чтобы каждый раз выполнять сетевые вызовы.
Ты пытался:
val currentUser: Observable<User> = Observable.create { emitter ->
...
}.replay(1)
.autoConnect(0)
?
Даже если подписчиков нет, Observable сохраняет последнее значение, а не удаляется.
Это было именно то, что я искал, но не думал, что это возможно в RxJava. Большое спасибо
Когда я узнал, что это возможно. Я считаю это святым Граалем RxJava
Что делать, если пользователь выходит из системы и я хочу, чтобы он был удален?
Эм-м-м. Возможно, просто вызовите на нем dispose(), а затем дайте ему умереть и воссоздайте его, когда снова появится активный пользователь. Если приложение одноэлементное, то неудачным способом его моделирования было бы сделать эту вещь допускающей значение NULL. В основном, чтобы избавиться от него, вызовите dispose(), но тогда он больше не будет работать, и его нужно будет воссоздать.
Благодаря EpicPandaForce это то, что я в итоге использовал. Мне пришлось указать тип эмиттера, иначе возникнет ошибка
val currentUser: Observable<User> = Observable.create { emitter: ObservableEmitter<User> ->
...
}.replay(1)
.autoConnect(0)
Что означает autoConnect (0)? Наблюдаемое всегда связано?