rx-java
Android con RxJava
Ricerca…
Osservazioni
RxAndroid era una libreria con molte funzionalità. È stato diviso in molte librerie diverse passando dalla versione 0.25.0 a 1.x.
Un elenco delle librerie che implementano le funzioni disponibili prima che il 1.0 è mantenuto qui .
RxAndroid - AndroidSchedulers
Questa è letteralmente l'unica cosa di cui hai bisogno per iniziare a utilizzare RxJava su Android.
Includere RxJava e RxAndroid nelle dipendenze gradle:
// use the last version
compile 'io.reactivex.rxjava2:rxjava:2.1.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
L'aggiunta principale di RxAndroid a RxJava è un programma di pianificazione per il thread principale Android o il thread dell'interfaccia utente.
Nel tuo codice:
Observable.just("one", "two", "three", "four", "five")
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
data -> doStuffOnMainThread(),
error -> handleErrorOnMainThread()
)
Oppure puoi creare uno Scheduler per un Looper personalizzato:
Looper backgroundLooper = // ...
Observable.just("one", "two", "three", "four", "five")
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.from(backgroundLooper))
.subscribe(
data -> doStuffOnMainThread(),
error -> handleErrorOnMainThread()
)
Per la maggior parte di tutto il resto è possibile fare riferimento alla documentazione RxJava standard.
Componenti RxLifecycle
La libreria RxLifecycle semplifica l'associazione degli abbonamenti osservabili alle attività Android e al ciclo di vita dei frammenti.
Tieni presente che dimenticare di annullare l'iscrizione a un Osservabile può causare perdite di memoria e mantenere attivo l'evento attività / frammento dopo che è stato distrutto dal sistema.
Aggiungi la libreria alle dipendenze:
// use the last version available
compile 'com.trello:rxlifecycle:0.6.1'
compile 'com.trello:rxlifecycle-components:0.6.1'
Quindi estende le classi Rx* :
-
RxActivity/support.RxFragmentActivity/support.RxAppCompatActivity -
RxFragment/support.RxFragment -
RxDialogFragment/support.RxDialogFragment -
support.RxAppCompatDialogActivity
Sei tutto pronto, quando ti iscrivi a un osservabile puoi ora:
someObservable
.compose(bindToLifecycle())
.subscribe();
Se lo si esegue nel metodo onCreate() dell'attività, verrà automaticamente annullato l'iscrizione in onDestroy() .
Lo stesso accade per:
-
onStart()->onStop() -
onResume()->onPause() -
onAttach()->onDetach()(solo frammento) -
onViewCreated()->onDestroyView()(solo frammento)
In alternativa è possibile specificare l'evento quando si desidera che la disiscrizione avvenga:
Da un'attività:
someObservable
.compose(bindUntilEvent(ActivityEvent.DESTROY))
.subscribe();
Da un frammento:
someObservable
.compose(bindUntilEvent(FragmentEvent.DESTROY_VIEW))
.subscribe();
È inoltre possibile ottenere il ciclo di vita osservabile utilizzando il metodo lifecycle() per ascoltare direttamente gli eventi del ciclo di vita.
RxLifecycle può anche essere utilizzato passando direttamente ad esso il ciclo di vita osservabile:
.compose(RxLifecycleAndroid.bindActivity(lifecycle))
Se devi gestire Single o Completable puoi farlo aggiungendo rispettivamente forSingle() o forCompletable dopo il metodo bind:
someSingle
.compose(bindToLifecycle().forSingle())
.subscribe();
Può anche essere utilizzato con la libreria Navi .
Rxpermissions
Questa libreria consente l'utilizzo di RxJava con il nuovo modello di autorizzazione di Android M.
Aggiungi la libreria alle dipendenze:
Rxjava
dependencies {
compile 'com.tbruyelle.rxpermissions:rxpermissions:0.8.0@aar'
}
Rxjava2
dependencies {
compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.8.1@aar'
}
uso
Esempio (con Retrolambda per brevità, ma non richiesto):
// 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
}
});
Ulteriori informazioni: https://github.com/tbruyelle/RxPermissions .