1
當我得到一些Observable
它在後臺線程上執行,但想要在當前類中執行一些副作用並在主線程上使用 - 是否可以使用doOnNext
中的同步塊來保持線程安全?如何使用doOnNext/doOnCompleted正確執行副作用同步?
I.e.是這樣的:
class MyClass {
private final CustomObject information = new CustomObject();
public Observable<?> func() {
// runs on Schedulers.io(), but I don't neccessarily know it
Observable<?> observable = someModule.getObservable();
return observable
.doOnNext(v -> {
synchronized (this) {
information.saveSomething(v);
}
});
}
public void otherFunc() {
synchronized (this) {
information.saveSomething("blah-foo-bar");
}
}
}
我現在有在我的項目沒有這樣的代碼,但有時棘手的情況出現:
- 我知道我可以
.doOnNext()
之前使用.observeOn(mainThread())
,但這將有修改的效果整個下游,這並不總是想 - 我剛剛意識到,另一個好的解決方案將使CustomObject()不可變(但然後
final
修改器將需要消失 - 是否可以?)
哦,很好的解決方案!我一直希望找到像這樣的東西 - 基於rx,因爲一些模擬器有一些運行時在執行'View.post()'時會導致泄漏。或者類似的東西,但我記得有問題。而且它還需要傳遞'查看/上下文',通常會聞到它的味道。 – dimsuz