rx-java
Android avec RxJava
Recherche…
Remarques
RxAndroid était une bibliothèque avec de nombreuses fonctionnalités. Il a été divisé en plusieurs bibliothèques différentes allant de la version 0.25.0 à 1.x.
Une liste des bibliothèques qui implémentent les fonctionnalités disponibles avant la version 1.0 est conservée ici .
RxAndroid - AndroidSchedulers
Ceci est littéralement la seule chose dont vous avez besoin pour commencer à utiliser RxJava sur Android.
Incluez RxJava et RxAndroid dans vos dépendances graduelles:
// use the last version
compile 'io.reactivex.rxjava2:rxjava:2.1.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
L'ajout principal de RxAndroid à RxJava est un planificateur pour le thread principal Android ou l'interface utilisateur.
Dans votre code:
Observable.just("one", "two", "three", "four", "five")
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
data -> doStuffOnMainThread(),
error -> handleErrorOnMainThread()
)
Ou vous pouvez créer un planificateur pour un Looper personnalisé:
Looper backgroundLooper = // ...
Observable.just("one", "two", "three", "four", "five")
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.from(backgroundLooper))
.subscribe(
data -> doStuffOnMainThread(),
error -> handleErrorOnMainThread()
)
Pour la plupart des choses, vous pouvez vous référer à la documentation RxJava standard.
Composants RxLifecycle
La bibliothèque RxLifecycle facilite la liaison des souscriptions observables aux activités Android et au cycle de vie des fragments.
Gardez à l'esprit que l'oubli de la désinscription d'un Observable peut provoquer des fuites de mémoire et empêcher que votre activité / fragment reste actif après sa destruction par le système.
Ajoutez la bibliothèque aux dépendances:
// use the last version available
compile 'com.trello:rxlifecycle:0.6.1'
compile 'com.trello:rxlifecycle-components:0.6.1'
Rx* classes Rx* :
-
RxActivity/support.RxFragmentActivity/support.RxAppCompatActivity -
RxFragment/support.RxFragment -
RxDialogFragment/support.RxDialogFragment -
support.RxAppCompatDialogActivity
Vous êtes tous ensemble, lorsque vous vous abonnez à un observable, vous pouvez maintenant:
someObservable
.compose(bindToLifecycle())
.subscribe();
Si vous l'exécutez dans la méthode onCreate() de l'activité, celle-ci sera automatiquement désabonnée de la onDestroy() .
Même chose pour:
-
onStart()->onStop() -
onResume()->onPause() -
onAttach()->onDetach()(fragment uniquement) -
onViewCreated()->onDestroyView()(fragment uniquement)
Comme alternative, vous pouvez spécifier l'événement lorsque vous souhaitez que la désinscription se produise:
A partir d'une activité:
someObservable
.compose(bindUntilEvent(ActivityEvent.DESTROY))
.subscribe();
D'un fragment:
someObservable
.compose(bindUntilEvent(FragmentEvent.DESTROY_VIEW))
.subscribe();
Vous pouvez également obtenir le cycle de vie observable en utilisant le lifecycle() la méthode lifecycle() pour écouter directement les événements du cycle de vie.
RxLifecycle peut également être utilisé directement en lui transmettant le cycle de vie observable:
.compose(RxLifecycleAndroid.bindActivity(lifecycle))
Si vous avez besoin de gérer Single ou Completable vous pouvez le faire simplement en ajoutant respectivement forSingle() ou forCompletable après la méthode bind:
someSingle
.compose(bindToLifecycle().forSingle())
.subscribe();
Il peut également être utilisé avec la bibliothèque Navi .
Rxpermissions
Cette bibliothèque permet l'utilisation de RxJava avec le nouveau modèle d'autorisation Android M.
Ajoutez la bibliothèque aux dépendances:
Rxjava
dependencies {
compile 'com.tbruyelle.rxpermissions:rxpermissions:0.8.0@aar'
}
Rxjava2
dependencies {
compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.8.1@aar'
}
Usage
Exemple (avec Retrolambda pour des raisons de concision, mais pas obligatoire):
// 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
}
});
En savoir plus: https://github.com/tbruyelle/RxPermissions .