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 .



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow