Klasa abstrakcyjna Subscriber
ma faktycznie metodę add
, która pozwala na dodanie subskrypcji do subskrypcji.
def myObservable = Observable.create({ aSubscriber ->
val listener = {event ->
aSubscriber.onNext(event);
}
existingEventSource.addListener(listener)
// Adds a lambda to be executed when the Subscriber un-subscribes from your Observable
aSubscriber.add(Subscriptions.create(() -> existingEventSource.removeListener(listener)));
})
Pomyśl aSubscriber
jako Observer
że subskrybowanego do Observable
; będziemy to nazywać Subscriber
. Dopóki Subscriber
nadal subskrybuje Observable
, Observable
może emitować wartości. Ale gdy ten Subscriber
wyłączy subskrypcję, powinien się zatrzymać. Ale jeśli chcemy otrzymać powiadomienie, gdy rezygnujemy z subskrypcji Subscriber
, możemy zarejestrować Action
, który zostanie uruchomiony, gdy się to stanie. Do tego służy metoda add
. Jak wspomniano przez @dwstwoisen w komentarzach; w zasadzie rejestrujesz lambdę, która zostanie wykonana, gdy subskrybent zrezygnuje z subskrypcji.
Istnieje również możliwość rezygnacji z subskrypcji w innym harmonogramie. Zobacz MainThreadSubscription
z projektu rxanroid
, aby dowiedzieć się, jak to osiągnąć.
Oto przykład, w jaki sposób chcesz użyć go do wypisywania na głównym wątku
aSubscriber.add(new MainThreadSubscription() {
@Override
protected void onUnsubscribe() {
existingEventSource.removeListener(listener);
}
});
Miguel, dzięki za odpowiedź, ale nie mogę dostać. Czy zastanawiasz się trochę dalej, czy wskazujesz mi jakiś dokument lub kod źródłowy, który mogę przeczytać? – xwk
Korzystając z metody dodawania, zarejestruj się lambda, która zostanie wykonana po anulowaniu subskrypcji. – dwursteisen
@xwk, dodałem trochę wyjaśnienia, które, mam nadzieję, dadzą lepsze pojęcie o tym, co się dzieje. –