AsyncTaskLoader
をRxJavaに移行する過程で、RxJavaの並行性のアプローチに関する詳細をすべて理解しようとしています。subscribeOnが指定されていても、メインスレッドでコードが実行されています
これが実行されます、トップレベルのメソッドです::シンプルなものはOK、しかし、私は次のコードで苦労しています実行していた
mCompositeDisposable.add(mDataRepository
.getStuff()
.subscribeOn(mSchedulerProvider.io())
.subscribeWith(...)
mDataRepository.getStuffは()次のようになります。
public Observable<StuffResult> getStuff() {
return mDataManager
.listStuff()
.flatMap(stuff -> Observable.just(new StuffResult(stuff)))
.onErrorReturn(throwable -> new StuffResult(null));
そして最終層:上記のコードを持つので
public Observable<Stuff> listStuff() {
Log.d(TAG, ".listStuff() - "+Thread.currentThread().getName());
String sql = <...>;
return mBriteDatabase.createQuery(Stuff.TABLE_NAME, sql).mapToList(mStuffMapper);
}
、log
は.listStuff() - main
を印刷しますが、これは私が探しているものではありません。そして、なぜ私は本当にわからない。 subscribeOn
を設定すると、チェーンから引き出されたすべてのイベントは、subscribeOnメソッドで指定されたスレッドで処理されるという印象を受けました。
私が考えているのは、mBriteDatabase
に達する前の元の最終層のコードは、RxJavaの世界ではないため、createQuery
が呼び出されるまでイベントではないということです。だから私はおそらく何らかの種類のラッパーが必要でしょうか?しかし私は、それが非Rxのコードのラッパーだ、と私のデータベース層が観測を返すlistStuff
がある
ありがとうございます!私は混乱し、何かが本当にシンプルすぎるほど複雑すぎる。 – vkislicins