поэтому сначала я покажу вам, что у меня есть и то, что я думаю, что там происходит:Run doOnNex на Ja BehaviorSubject в определенной теме
У меня есть BehavourSubject<DataObject>
:
private BehaviorSubject<DataObject> dataSubject = BehaviorSubject.create();
я вернуть его обратно в определенный функция, которая выглядит следующим образом:
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
в моем определенномThread?
И когда вы пытаетесь, не работает ли это? – weston