rx-java
Android z RxJava
Szukaj…
Uwagi
RxAndroid był kiedyś biblioteką z wieloma funkcjami. Został on podzielony na wiele różnych bibliotek, przechodząc z wersji 0.25.0 do 1.x.
Lista bibliotek, które realizują funkcje dostępne przed 1,0 utrzymuje się tutaj .
RxAndroid - AndroidSchedulers
To dosłownie jedyna rzecz, której potrzebujesz, aby zacząć korzystać z RxJava na Androidzie.
Uwzględnij RxJava i RxAndroid w zależnościach między stopniami:
// use the last version
compile 'io.reactivex.rxjava2:rxjava:2.1.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
Głównym dodatkiem RxAndroid do RxJava jest harmonogram dla głównego wątku Androida lub wątku interfejsu użytkownika.
W twoim kodzie:
Observable.just("one", "two", "three", "four", "five")
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
data -> doStuffOnMainThread(),
error -> handleErrorOnMainThread()
)
Możesz też utworzyć harmonogram dla niestandardowego Looper :
Looper backgroundLooper = // ...
Observable.just("one", "two", "three", "four", "five")
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.from(backgroundLooper))
.subscribe(
data -> doStuffOnMainThread(),
error -> handleErrorOnMainThread()
)
Dla większości innych informacji można odwołać się do standardowej dokumentacji RxJava.
Elementy RxLifecycle
Biblioteka RxLifecycle ułatwia wiązanie obserwowalnych subskrypcji z działaniami systemu Android i cyklem życia fragmentów.
Pamiętaj, że zapomnienie o anulowaniu subskrypcji Obserwowalnego może spowodować wyciek pamięci i utrzymanie aktywności / fragmentu zdarzenia po zniszczeniu przez system.
Dodaj bibliotekę do zależności:
// use the last version available
compile 'com.trello:rxlifecycle:0.6.1'
compile 'com.trello:rxlifecycle-components:0.6.1'
Następnie rozszerza klasy Rx* :
-
RxActivity/support.RxFragmentActivity/support.RxAppCompatActivity -
RxFragment/support.RxFragment -
RxDialogFragment/support.RxDialogFragment -
support.RxAppCompatDialogActivity
Wszystko gotowe, subskrybując Observable, możesz teraz:
someObservable
.compose(bindToLifecycle())
.subscribe();
onCreate() tego w onCreate() działania spowoduje automatyczne anulowanie subskrypcji metody onDestroy() .
To samo dzieje się w przypadku:
-
onStart()->onStop() -
onResume()->onPause() -
onAttach()->onDetach()(tylko fragment) -
onViewCreated()->onDestroyView()(tylko fragment)
Alternatywnie możesz określić zdarzenie, kiedy chcesz zrezygnować z subskrypcji:
Z działania:
someObservable
.compose(bindUntilEvent(ActivityEvent.DESTROY))
.subscribe();
Z fragmentu:
someObservable
.compose(bindUntilEvent(FragmentEvent.DESTROY_VIEW))
.subscribe();
Można również uzyskać obserwowalny cykl życia za pomocą metody lifecycle() celu bezpośredniego nasłuchiwania zdarzeń cyklu życia.
RxLifecycle można również wykorzystać bezpośrednio, przekazując mu obserwowalny cykl życia:
.compose(RxLifecycleAndroid.bindActivity(lifecycle))
Jeśli potrzebujesz obsługi Single lub Completable , możesz to zrobić, dodając odpowiednio forSingle() lub forCompletable po metodzie bind:
someSingle
.compose(bindToLifecycle().forSingle())
.subscribe();
Można go również używać z biblioteką Navi .
Rxpermissions
Ta biblioteka pozwala na korzystanie z RxJava z nowym modelem uprawnień Android M.
Dodaj bibliotekę do zależności:
Rxjava
dependencies {
compile 'com.tbruyelle.rxpermissions:rxpermissions:0.8.0@aar'
}
Rxjava2
dependencies {
compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.8.1@aar'
}
Stosowanie
Przykład (z Retrolambda dla zwięzłości, ale nie wymagane):
// Must be done during an initialization phase like onCreate
RxPermissions.getInstance(this)
.request(Manifest.permission.CAMERA)
.subscribe(granted -> {
if (granted) { // Always true pre-M
// I can control the camera now
} else {
// Oups permission denied
}
});
Czytaj więcej: https://github.com/tbruyelle/RxPermissions .