2016-05-28 6 views
0

rxlavaのオペレータまたはコード例でobservableの結果を呼び出されたスレッドに返す方法はありますか? Androidの別の1つのキャッシュです) アプリケーションはいくつかのレイヤーに分かれています:サブスクライバのスレッドで別のObservable結果を返すRxJava演算子

UI |ドメイン(中)層(キャッシング、アプリロジック)|データレイヤー(ディスクとネットワーク)

問題は、観測可能なスレッドが異なるレイヤーからどのスレッドから呼び出されるかわからないということです。だから私はAndroidのメインスレッドや別の1つのSchedullers.computation()またはSchedullers.io()スレッドへの冗長切り替えを行う必要があります。

たとえば、UIレイヤーは、UIメインスレッド(または計算などの計算)からドメインレイヤーに観察可能にサブスクライブし、キャッシュされたデータがすぐに戻り値に存在する場合は、しかし、キャッシュされた値のドメイン層がIOスレッドのデータ層に登録されていない場合、ディスク上のデータまたは計算スレッド内でデータを生成し、以前の層が購読したスレッドに戻る必要がある場合。

もちろん、データの同時アクセスを考慮する必要があります。

ありがとうございます!

UPD:Observable Iドメインドメイン層を修復するために、.observeOn(AndroidSchedulers.mainThread())を削除するだけでよいことを理解しています。私はサブスクリプションまたはUIとやりとりするが、Observableのどんなドメイン層でもやり取りしないところにいつも最終的に.observeOn(AndroidSchedulers.mainThread())を追加するだけです。

答えて

0

私は経験豊富なAndroidの開発者ではないんだけど、私の知る限りでは、各スレッドはHandlerとともに、そのLooperが関連することができます。 RxAndroidライブラリでは、HandlerからSchedulerを作成し、ルーパに関連付けられたスレッドではobserveOnにすることができます。

+0

ご協力いただきありがとうございます。問題はrxjavaスレッド処理に関する私の誤解でした。私の更新を参照してください。しかし、あなたの決断私の意見に予測不可能なバグのソースとしてお勧めしません – Dmytro

+0

しかし、実際にはRxAndroidの担当者https://github.com/ReactiveX/RxAndroid/pull/247で同様の問題が見つかりましたが、誰もそれは問題を作成することができると言う。しかしcurrentThread()はまだリリース版ではまだありません – Dmytro

関連する問題