我正在开发利用RxJava,领域和改造的应用程序。
我需要创建非常具体的数据处理链。我需要在io
调度程序上执行Retrofit调用,然后在我的自定义单线程realm
调度程序上处理提供的数据,然后将结果推送到mainThread
调度程序上的ui。我尝试使用observeOn
和subscribeOn
的多个组合来执行此操作,但我无法在realm
sheduler上执行中间部分。
我的目标是这样的
scheduler: io ---------------> realm -----------------> mainthread
action : retrofit call-----> database update -------> ui update
如何创建这样的可观察链,每个可观察的工作都在特定的线程上完成?
谢谢
答案 0 :(得分:3)
查看Observable.observeOn(...)
方法。此方法将确保在提供的调度程序上发生之后发生的所有操作。
支持您的自定义"领域"调度程序,您需要为RxJava提供一些安排工作的方法。如果您使用标准Executor
(如Executors.newSingleThreadExecutor()
支持Realm的单线程策略),则可以使用Schedulers.from(Executor)
创建将在其上执行的调度程序具体Executor
。
ExecutorService realm = Executors.newSingleThreadExecutor();
Scheduler realmScheduler = Schedulers.from(realm);
Retrofit source;
source.call()
.subscribeOn(Schedulers.io())
.observeOn(realmScheduler)
.map(DataBaseUpdate)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(UIUpdate)