Themen sind im Wesentlichen beide Observables und Beobachter.
Ein Observable ist im Wesentlichen eine Sache, die eine Funktion hat, die einen Beobachter nimmt und ein Abonnement zurückgibt. So zum Beispiel, da einfach zu beobachten:
Observable<Integer> observable = Observable.create(new Observable.OnSubscribeFunc<Integer>() {
@Override
public Subscription onSubscribe(Observer<? super Integer> observer) {
observer.onNext(3);
observer.onNext(2);
observer.onNext(1);
observer.onCompleted();
return Subscriptions.empty();
}
});
Und hier möchten wir es, abonnieren Sie für jede ganze Zahl eine Zeile drucken:
Subscription sub = observable.subscribe(new Action1<Integer>() {
@Override
public void call(Integer integer) {
System.out.println(integer);
}
});
Sie auf der oben durch den Aufruf sub.unsubscribe()
austragen würde.
ist hier ein PublishSubject, die in etwa die gleiche Sache tut:
PublishSubject<Integer> publishSubject = PublishSubject.create();
Subscription subscription = publishSubject.subscribe(new Action1<Integer>() {
@Override
public void call(Integer integer) {
System.out.println(integer);
}
});
publishSubject.onNext(3);
publishSubject.onNext(2);
publishSubject.onNext(1);
Sie von ihm die gleiche Art und Weise austragen würde, durch subscription.unsubscribe()
aufrufen.
Ist BehaviorSubject im Wesentlichen das gleiche wie ReplaySubject (1)? –
@DzmitryLazerka: BehaviorSubject hat immer einen Anfangswert. Wenn Sie nach BehaviorSubject ohne Anfangswert suchen, verwenden Sie ReplaySubject (1). – gregschlom
Große Antwort obwohl leichte Korrektur - ReplaySubject kann auch einen Puffer in create() angeben, der die Anzahl der Elemente angibt, die im Abonnement ausgegeben werden – jklp