在我的应用程序中,我使用 RxJava2 和 Architecture Components ViewModel 中的新类。在我的例子中,我需要将 SQL 子句推送到 ViewModel,它会做一些魔术并返回 Observable,它会给我我需要的数据。一切正常,但我不确定我是否以最佳方式使用 RX。
我的数据流:ViewModel 有 PublishSubject,我在上面推送 SQL。ViewModel 还具有通过映射主题创建的 Observable。此外,我在 Subject 上使用了 distinctUntilChanged,以防止再次执行相同的查询。为了缓存数据,我在 Observable 上使用了 replay(1).autoconnect(1),但这种方法有一个缺陷。有时,当 Observable 尚未连接时,我的 Subject 推送了 Sql,而我的数据从未到达我这里。我应该使用 BehaviourSubject 吗?或者也许我不应该首先使用 replay(1).autoconnect(1) ?或者也许我的整个流程是错误的?例子:
val listSubject: Subject<RawSql> = PublishSubject.create()
val sqlListEmitter: Observable<List<T>> =
listSubject
.subscribeOn(Schedulers.computation())
.map { // SOME MAGIC HERE }
.replay(1).autoConnect(1, { compositeDisposable.add(it) })