Chcę utworzyć Observable
z Kliknięciem słuchacza z wykorzystaniem RxJava 2. zacząłem od najprostszej realizacji (nie używam lambdy tutaj, aby pokazać różne typy w tej metodzie):Jaka jest różnica między RxJava 2 usuwalny i jednorazowy?
Observable<View> viewObservable = Observable.create(new ObservableOnSubscribe<View>() {
@Override
public void subscribe(@NonNull ObservableEmitter<View> e) throws Exception {
mNewWordView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View value) {
if (!e.isDisposed()) {
e.onNext(value);
}
}
});
}
});
potem pomyślałem o tym, jak ustawić onClickListener
na wartość null, jeśli nie jest potrzebna dalej. Okazało się, że istnieją dwie metody z podobnych (jak dla mnie) nazwami:
e.setCancellable(Cancellable c);
i e.setDisposable(Disposable d);
Jaka jest różnica między nimi a które należy używać?
Dziękuję. Czy powinienem użyć 'check if (! E.isDisposed()) jeśli używam Cancellable i Disposed? – Gaket
Tak, wywołanie upakowania w dalszym ciągu jest poprawnie odzwierciedlane przez isDisposed() bez względu na posiadane zasoby. – akarnokd
W tym podstawowym przypadku naprawdę nie jest to potrzebne, ale na wypadek, gdybyś chciał emitować 'onError', zaleca się kontrolę isDisposed(), ponieważ jeśli emiter zostanie usunięty, błąd zostanie skierowany do globalnego błędu program obsługi, który często nieoczekiwanie powoduje awarię aplikacji na Androida. – akarnokd