RxJava在多个线程上查看observable

时间:2017-01-17 12:51:53

标签: multithreading realm rx-java

我正在开发利用RxJava,领域和改造的应用程序。

我需要创建非常具体的数据处理链。我需要在io调度程序上执行Retrofit调用,然后在我的自定义单线程realm调度程序上处理提供的数据,然后将结果推送到mainThread调度程序上的ui。我尝试使用observeOnsubscribeOn的多个组合来执行此操作,但我无法在realm sheduler上执行中间部分。

我的目标是这样的 scheduler: io ---------------> realm -----------------> mainthread action : retrofit call-----> database update -------> ui update

如何创建这样的可观察链,每个可观察的工作都在特定的线程上完成?

谢谢

1 个答案:

答案 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)