私はRxJava、領域と改造を利用したアプリケーションに取り組んでいます。
私は非常に特定のデータ処理チェーンを作成する必要があります。 Retrofitコールを io
スケジューラー、次に私のカスタムシングルスレッドで提供されたデータを処理する realm
スケジューラー、そして結果を私のUIに押し出す mainThread
スケジューラ。私はこれを、 observeOn
そして subscribeOn
私は中間部分を実行することはできません realm
sheduler。
私の目標はこのようなものです
scheduler: io ---------------> realm -----------------> mainthread
action : retrofit call-----> database update -------> ui update
どの観察可能な作業が特定のスレッド上で行われるか、そのような観察可能な連鎖を作成するにはどうすればよいですか?
ありがとうございました
回答:
回答№1の場合は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)