rx-java
Android met RxJava
Zoeken…
Opmerkingen
RxAndroid was een bibliotheek met veel functies. Het is opgesplitst in veel verschillende bibliotheken die van versie 0.25.0 naar 1.x gaan.
Een lijst met bibliotheken die de beschikbare functies voor de 1.0 implementeren, wordt hier bijgehouden.
RxAndroid - AndroidSchedulers
Dit is letterlijk het enige dat je nodig hebt om RxJava op Android te gaan gebruiken.
Neem RxJava en RxAndroid op in uw gradle-afhankelijkheden:
// use the last version
compile 'io.reactivex.rxjava2:rxjava:2.1.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
RxAndroid belangrijkste toevoeging aan RxJava is een planner voor de Android-hoofdthread of UI-thread.
In uw code:
Observable.just("one", "two", "three", "four", "five")
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
data -> doStuffOnMainThread(),
error -> handleErrorOnMainThread()
)
Of u kunt een planner maken voor een aangepaste Looper :
Looper backgroundLooper = // ...
Observable.just("one", "two", "three", "four", "five")
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.from(backgroundLooper))
.subscribe(
data -> doStuffOnMainThread(),
error -> handleErrorOnMainThread()
)
Voor bijna al het andere kunt u verwijzen naar standaard RxJava-documentatie.
RxLifecycle-componenten
De RxLifecycle- bibliotheek maakt het gemakkelijker waarneembare abonnementen te binden aan Android-activiteiten en de levenscyclus van fragmenten.
Vergeet niet dat het vergeten van het uitschrijven van een Observable geheugenlekken kan veroorzaken en uw activiteit / fragment levend kan houden nadat het door het systeem is vernietigd.
Voeg de bibliotheek toe aan de afhankelijkheden:
// use the last version available
compile 'com.trello:rxlifecycle:0.6.1'
compile 'com.trello:rxlifecycle-components:0.6.1'
Rx* vervolgens de Rx* -klassen uit:
-
RxActivity/support.RxFragmentActivity/support.RxAppCompatActivity -
RxFragment/support.RxFragment -
RxDialogFragment/support.RxDialogFragment -
support.RxAppCompatDialogActivity
U bent helemaal klaar, wanneer u zich abonneert op een Observable, kunt u nu:
someObservable
.compose(bindToLifecycle())
.subscribe();
Als u dit uitvoert in de methode onCreate() van de activiteit, wordt dit automatisch uitgeschreven in onDestroy() .
Hetzelfde gebeurt voor:
-
onStart()->onStop() -
onResume()->onPause() -
onAttach()->onDetach()(alleen fragment) -
onViewCreated()->onDestroyView()(alleen fragment)
Als alternatief kunt u de gebeurtenis opgeven wanneer u wilt dat de afmelding plaatsvindt:
Van een activiteit:
someObservable
.compose(bindUntilEvent(ActivityEvent.DESTROY))
.subscribe();
Uit een fragment:
someObservable
.compose(bindUntilEvent(FragmentEvent.DESTROY_VIEW))
.subscribe();
U kunt de te observeren levenscyclus ook verkrijgen met behulp van de methode lifecycle() om rechtstreeks naar gebeurtenissen in de lifecycle() te luisteren.
RxLifecycle kan ook worden gebruikt om de levenscyclus waarneembaar aan te geven:
.compose(RxLifecycleAndroid.bindActivity(lifecycle))
Als u Single of Completable moet verwerken, kunt u dit doen door respectievelijk alleen forSingle() of forCompletable na de forCompletable :
someSingle
.compose(bindToLifecycle().forSingle())
.subscribe();
Het kan ook worden gebruikt met de Navi- bibliotheek.
Rxpermissions
Deze bibliotheek staat het gebruik van RxJava toe met het nieuwe Android M-machtigingsmodel.
Voeg de bibliotheek toe aan de afhankelijkheden:
Rxjava
dependencies {
compile 'com.tbruyelle.rxpermissions:rxpermissions:0.8.0@aar'
}
Rxjava2
dependencies {
compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.8.1@aar'
}
Gebruik
Voorbeeld (met Retrolambda voor beknoptheid, maar niet vereist):
// 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
}
});
Lees meer: https://github.com/tbruyelle/RxPermissions .