Manera eficiente de manipular los subprocesos RxJava
En mi proyecto necesito procesar objetos en diferentes hilos. Para manipular el comportamiento del flujo, creo nuevos observables para cambiar su observeOn()
esta manera:
apiService.getObjects(token) // Retrofit .compose(bindToLifecycle()) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .doOnNext(o -> { // process in Main Thread }) .map(Observable::just) // create new one, to change thread for it .observeOn(Schedulers.io()) .subscribe(o -> { // process in the background thread });
Pero creo que en RxJava hay mucho más hermosa y eficiente manera de procesar una respuesta en diferentes hilos. Intenté google, pero no encontré nada.
- ¿Cómo reconstruir o restablecer caché Observable, utilizado con Retrofit para obtener nuevos datos?
- Cancelación de varias suscripciones a la vez en RxAndroid - Android
- RXJava - Dividir y combinar un Observable
- ¿Cómo ignorar el error y continuar la corriente infinita?
- Disminuir los clics de botón mediante Rx
Gracias,
Anton
- ¿Cómo implementar la función de búsqueda con SearchView, Retrofit y RxJava (RxBindings)?
- No se puede convertir el objeto Subclase en cuerpo de solicitud json en Retrofit 2.0 con GsonConverterFactory
- Android gestiona la solicitud múltiple rxJava en el dispositivo de rotación
- Retrofit no desencadena onError cuando se utiliza ErrorHandler personalizado
- Retorno combinado observable sólo si una condición coincide
- RxJava comparte las emisiones de un Observable entre múltiples suscriptores
- Implementar reintento Cuando la lógica
- Prueba de desplazamiento sin fin RecyclerView con Espresso y RxJava
En Rx, por lo general se recomienda evitar efectos secundarios en los bloques 'do' (que sólo se ejecutará si el flujo se suscribe en) y prefiere el código de suscripción.
En su caso puede aprovechar cache()
o publish()...connect()
, por ejemplo:
query = apiService.getObjects(token) .compose(bindToLifecycle()) .subscribeOn(Schedulers.io()) .cache(); query.observeOn(AndroidSchedulers.mainThread()) .subscribe(o -> { // process in Main Thread }) query.observeOn(Schedulers.io()) .subscribe(o -> { // process in the background thread });
Con publish()
lugar de cache()
, el código es idéntico, pero puedes decidir cuándo disparar tu consulta conectando la secuencia (llamas query.connect()
después de conectar 2 suscripciones).
Si su trabajo de suscripción es un cálculo de fondo, Schedulers.computation()
puede ser preferido sobre Schedulers.io()
.
Tenga en cuenta que AFAICT su código funcionará perfectamente sin la línea de map(Observable::just)
, ya que las sentencias 'observerOn' sólo afectan a la secuencia más abajo (y no a las sentencias 'do' anteriores)
- ¿Cómo obtener mejoras de rendimiento mediante el procesamiento para Android?
- Aplicación para establecer como lanzador