2014-09-02 11 views
17

jak rozumiem AndroidObservable pomaga zapewnić, że:Dlaczego należy rozważyć użycie AndroidObservables w RxJava

  1. Abonent zawsze zauważa się na głównym wątku
  2. gdy fragment/działalności jest odłączony/zatrzymał się, a następnie zatrzymuje obserwacyjnych natychmiast, a komponenty związane z ramami (takie jak ui textviews itp.) nie są aktualizowane.

Jednakże, w celu zapewnienia, że ​​kontekst jest zwolniony (wyciek zapobieganie), większość przykładów widzę zazwyczaj mówią, że trzeba i tak zrobić .unsubscribe onDestroyView/onDestroy, która zasadniczo zatrzymuje subskrypcję i zapobiega abonenta od otrzymania tych aktualizacji.

Więc moje pytanie brzmi:

Czy istnieje jakakolwiek inna zaletą korzystania AndroidObservables, jeśli mogę ręcznie wskazać, że abonament powinno się zdarzyć w głównym wątku, w drodze .observeOn (AndroidSchedulers.mainThread

()?

Czy jest jakaś różnica w poniższych dwóch podejść

_subscription1 = AndroidObservable.bindFragment(MyFragment.this, myCustomAwesomeObservable()) // 
          .subscribeOn(Schedulers.io()) // 
          .subscribe(...); 


_subscription2 = myCustomAwesomeObservable() 
          .subscribeOn(Schedulers.io()) // 
          .observeOn(AndroidSchedulers.mainThread()) // 
          .subscribe(...); 


@Override 
public void onDestroyView() { 
    _subscription1.unsubscribe(); 
    _subscription2.unsubscribe(); 
    super.onDestroyView(); 
} 

Odpowiedz

6

Masz rację Co AndroidObservable.bindFragment obecnie robi to:?.

Ten pomocnik zaplanuje przestrzeganie podanej sekwencji w głównym wątku UI i upewni się, że żadne powiadomienia nie zostaną przekazane do działania w przypadku, gdy zaplanowane jest zakończenie.

- część komentarza kodu źródłowego

Tak, to naprawdę nie zrobić różnicę, która z wdrożeń użyć.

Ale nadal warto używać AndroidObservable, ponieważ dodatkowa funkcjonalność może zostać dodana w przyszłości.

+0

ah to dobry punkt na dodanie dodatkowej funkcjonalności do trasy AndroidObservable. –

1

Już nie istnieje od wydania 1.0 RxAndroid. Sądzę, że możesz powiedzieć, że jest przestarzały lub przestał działać. Nie wydaje mi się, że warto już z tego korzystać.