Używam RxJava i RxAndroid, i chcę połączyć dwa obserwowalne, ale w międzyczasie muszę zaktualizować interfejs, więc muszę wykonać kod w głównym wątku przed docierając do subskrybenta.RxJava, wykonaj kod w wątku obserwatora przed powiązaniem dwóch obserwowalnych
Jednym z rozwiązań, zamiast płaskiego mapowania (czy jest to akceptowany termin?) Dwóch obserwatorów, byłoby wywołanie następnego obserwowalnego w subskrybencie zaraz po aktualizacji interfejsu użytkownika, ale uważam, że powinno być bardziej eleganckie rozwiązanie takie jak:
myObservable
.map(new Func1<Object, Object>() {
@Override
public Object call(Object object) {
/* do stuff on the main thread */
return object;
}
})
.flatMap(new Func1<Object, Observable<OtherObject>>() {
@Override
public Observable<OtherObject> call(Object o) {
return new MyOtherObservable(o);
}
})
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread());
Oczywiście, prawdopodobnie mapa nie jest operatorem, którego potrzebuję tutaj użyć. Czy istnieje operator lub lepszy sposób na osiągnięcie tego celu? Czy też brakuje mi punktu widzenia tego, jak działają obserwowalne?
Czy to jest wywołane w wątku obserwatora? Dokumentacja stwierdza, że nie działa w określonym harmonogramie. – Pnikosis
Będziesz musiał użyć funkcji obserwacjiOn i określić harmonogram – dwursteisen
Dzięki, więc to oznacza, że wszystko, co uruchomię na doOnNext będzie działało w tym samym wątku co subskrybent. – Pnikosis