rx-java
Android con RxJava
Buscar..
Observaciones
RxAndroid solía ser una biblioteca con muchas características. Se ha dividido en muchas bibliotecas diferentes, pasando de la versión 0.25.0 a la 1.x.
Aquí se mantiene una lista de las bibliotecas que implementan las funciones disponibles antes de la 1.0.
RxAndroid - AndroidSchedulers
Esto es, literalmente, lo único que necesita para comenzar a usar RxJava en Android.
Incluya RxJava y RxAndroid en sus dependencias de gradle:
// use the last version
compile 'io.reactivex.rxjava2:rxjava:2.1.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
La adición principal de RxAndroid a RxJava es un programador para el subproceso principal de Android o subproceso de interfaz de usuario.
En su código:
Observable.just("one", "two", "three", "four", "five")
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
data -> doStuffOnMainThread(),
error -> handleErrorOnMainThread()
)
O puede crear un Programador para un Looper personalizado:
Looper backgroundLooper = // ...
Observable.just("one", "two", "three", "four", "five")
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.from(backgroundLooper))
.subscribe(
data -> doStuffOnMainThread(),
error -> handleErrorOnMainThread()
)
Para casi todo lo demás, puede consultar la documentación estándar de RxJava.
Componentes de RxLifecycle
La biblioteca RxLifecycle facilita la vinculación de suscripciones observables a actividades de Android y fragmenta el ciclo de vida.
Tenga en cuenta que olvidarse de cancelar la suscripción de un Observable puede causar pérdidas de memoria y mantener activo su evento / fragmento de actividad después de que el sistema lo haya destruido.
Agregue la biblioteca a las dependencias:
// use the last version available
compile 'com.trello:rxlifecycle:0.6.1'
compile 'com.trello:rxlifecycle-components:0.6.1'
Luego extiende las clases de Rx* :
-
RxActivity/support.RxFragmentActivity/support.RxAppCompatActivity -
RxFragment/support.RxFragment -
RxDialogFragment/support.RxDialogFragment -
support.RxAppCompatDialogActivity
Está todo listo, cuando se suscribe a un Observable ahora puede:
someObservable
.compose(bindToLifecycle())
.subscribe();
Si ejecuta esto en el método onCreate() de la actividad, se cancelará automáticamente la suscripción en onDestroy() .
Lo mismo sucede para:
-
onStart()->onStop() -
onResume()->onPause() -
onAttach()->onDetach()(solo fragmento) -
onViewCreated()->onDestroyView()(solo fragmento)
Como alternativa, puede especificar el evento cuando desea que se produzca la baja de la suscripción:
De una actividad:
someObservable
.compose(bindUntilEvent(ActivityEvent.DESTROY))
.subscribe();
De un fragmento:
someObservable
.compose(bindUntilEvent(FragmentEvent.DESTROY_VIEW))
.subscribe();
También puede obtener el ciclo de vida observable usando el lifecycle() del método lifecycle() para escuchar los eventos del ciclo de vida directamente.
RxLifecycle también se puede utilizar directamente y le pasa el ciclo de vida observable:
.compose(RxLifecycleAndroid.bindActivity(lifecycle))
Si necesita manejar Single o Completable , puede hacerlo simplemente agregando respectivamente forSingle() o forCompletable después del método de enlace:
someSingle
.compose(bindToLifecycle().forSingle())
.subscribe();
También se puede utilizar con la biblioteca Navi .
Permisos Rx
Esta biblioteca permite el uso de RxJava con el nuevo modelo de permiso de Android M.
Agregue la biblioteca a las dependencias:
Rxjava
dependencies {
compile 'com.tbruyelle.rxpermissions:rxpermissions:0.8.0@aar'
}
Rxjava2
dependencies {
compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.8.1@aar'
}
Uso
Ejemplo (con Retrolambda por brevedad, pero no es obligatorio):
// 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
}
});
Lea más: https://github.com/tbruyelle/RxPermissions .