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 .



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow