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.

Gracias,
Anton

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)

  • RxJava y Sqlbrite - qué operador utilizar
  • Encadenamiento de llamadas de Retrofit con RxJava y devolución del objeto principal
  • Encontrar falta onError en el proyecto
  • RxAndroid y Retrofit: No se puede crear el adaptador de llamada para io.reactivex.Observable <retrofit2.Response <okhttp3.ResponseBody >>
  • Cómo anular los Observables compartidos, infinitos con un retraso después de que el último suscriptor no se haya suscrito
  • Retrofit / Rxjava y servicios basados ​​en sesiones
  • ¿Por qué debounce () con toList () no funciona en RxAndroid?
  • Utilizando RxJava para la validación de inicio de sesión de correo electrónico, un observable está emitiendo dos veces
  • Rx Observable emitiendo valores periódicamente
  • RxJava / RxBinding: cómo manejar los errores en RxView
  • Filtrar lista de objetos en Rxjava
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.