dos modelos anteriores ▣ Nos permite manejar cadenas de datos o “eventos”, aplicando funciones (operadores) sobre los mismos. ▣ RxJava se basa en los Observables de .NET 4 (año 2010).
objetos que se suscriben a Observables. ▣ Dispone de tres métodos: □ onNext() Llamada con cada elemento emitido. □ onError() Para situaciones de error. □ onCompleted() El procesamiento acabó correctamente.
sobre un stream. ▣ Se pueden definir operadores propios, aunque es un caso poco habitual. ▣ Con ellos, podemos: □ Modificar eventos del stream y reemitir la versión modificada. □ Filtrar elementos, para que no continúen downstream. □ Combinar elementos. □ ¡Multithreading!
sobre un stream. ▣ Se pueden definir operadores propios, aunque es un caso poco habitual. ▣ Con ellos, podemos: □ Modificar eventos del stream y reemitir la versión modificada. □ Filtrar elementos, para que no continúen downstream. □ Combinar elementos. □ ¡Multithreading!
es decir, Android 2.3. ▣ Java no soporta funciones lambda hasta Java 8. ▣ Para ello, yo utilizo Retrolambda, que permite utilizar dichas funciones compiladas con bytecode Java 6.
para indicar a RxJava en qué hilos se ha de ejecutar cada paso. ▣ subscribeOn() indica en qué hilo se han de emitir los eventos. ▣ observeOn() especifica en qué hilo se ejecuta el .onNext(). ▣ Por defecto, todo ocurre en el mismo hilo en que se suscribe el Observer.
vista se toca en el hilo correcto. Observable.just(url) .map(url -> loader.load(url)) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(ImageView::setBitmap);
vistas de Android. ▣ Elimina la necesidad de utilizar listeners. ▣ Simplifica operaciones muy comunes. RxTextView.textChanges(hostTextView) .subscribe(this::checkHost);
"test.com", 443, "user", "pass"); when(hostsRepository .all()) .thenReturn(Observable.just(host)); Test! ▣ RxJava también te ayuda a escribir tests. ▣ Utilizando Espresso con Mockito, es muy fácil mockear un método que devuelve un Observable.
los posibles errores. ▣ Los Observers deben poder procesar eventos más rápido de lo que los emiten los Observables (Backpressure). □ No suele ser un problema, hasta que intentamos hacer algo avanzado. ▣ NO utilizar Observable.create(). Si usamos RxJava2, utilizar Flowable.create().
▣ La documentación a veces no es demasiado clara. □ Los comentarios de StackOverflow tampoco suelen ayudar mucho. ▣ Los tutoriales que verás, suelen utilizar incorrectamente Observable.create().
AsyncTask. ▣ Por norma general, se puede usar RxJava (via RxBinding o hecho por nosotros mismos), en lugar de Listeners. ▣ Para tareas de entrada/salida o de computación es perfecto, ya que la sobrecarga es mínima en este caso.