ので、最初に、私は私が持っていると私は考えることはそこに何が起こるかを紹介します:実行doOnNexは
private BehaviorSubject<DataObject> dataSubject = BehaviorSubject.create();
私は特定に戻ってそれを与える:
私はBehavourSubject<DataObject>
持っていますこのようになります機能:私はそれが起こると仮定何
public Observable<DataObject> pendingData() {
return this.dataSubject.asObservable()
.doOnNext(data -> {
// do something with this data that has to be thread save.
})
.observeOn(AndroidSchedulers.mainThread());
}
がdoOnNext部分はそのthis.dataSubject.onNext(data);
で、同じスレッドで実行されること、であるが呼び出されます。しかし、私はこのラムダでスレッドを節約する必要がある何かを行うと、私はセマフォーに入れたり、特定のスレッドですべてのdoOnNext
アクションを実行する必要があります。
私の最初のアイデアは「rxのスレッドを処理する通常の方法」ですが、うまくいきません。 私はこのような観測可能にsubscribeOn(certainBackgroundScheduler)
を追加するために考えた:
public Observable<DataObject> pendingData() {
return this.dataSubject.asObservable()
.doOnNext(data -> {
// do something with this data that has to be thread save.
})
.subscribeOn(certainBackgroundScheduler)
.observeOn(AndroidSchedulers.mainThread());
}
しかし、私は、サブスクリプション・ブロックで観察を作成するときは、このブロックはその
backgroundScheduler
で実行されています。私がサブスクライバで
onNext
を呼び出すと、そのスレッドでは論理的ですが、それはBehaviorSubjectで同じですか?
本当に簡単ですか?もしそうでなければ、被験者に特定のスレッドのdoOnNext
ブロックを強制的に実行させることができますか?
試してみるとうまくいかないのですか? – weston