Sustitución de EventBus por RxJava – N suscriptores siempre escuchando

Estoy reemplazando un patrón RxJava con RxJava en una aplicación para Android. Tuve eventos para alertar a las partes interesadas de las actualizaciones de los datos en mi singleton caché. Cada vez que se llamaba a un servicio web, los datos se actualizarían y los suscriptores serían alertados a través de un evento publicado.

Tengo algo cercano a este conjunto en RxJava con AsyncSubject . Los observadores obtienen un solo evento del sujeto, pero luego reciben un evento onComplete y se dan de baja. Esto funciona a medida que la interfaz de usuario se carga primero, pero cuando hay que actualizar los datos, no hay suscriptores que se notifiquen. ¿Cómo puedo decirle a esos Subscribers que sigan escuchando más onNext sucesos siguientes del Subject ?

Necesito un Subject que informe el elemento más reciente. PublishSubject sólo emite elementos después de la suscripción, por lo que no cumple mis necesidades. Mis suscriptores empiezan a observar en diferentes momentos (posiblemente después del primer evento de datos), así que necesito que el Sujeto emita el último elemento observado y luego mantenga el flujo abierto para los elementos siguientes. Parece que una combinación de AsyncSubject y PublishSubject es lo que necesito. ¿Hay alguna manera de lograr esto con las clases incorporadas, o necesito crear mi propio tema?

 WebServiceObservable OR CacheObservable ^ | AsyncSubject ^ | / \ / \ / \ UiObserver1 UiObserver2 

3 Solutions collect form web for “Sustitución de EventBus por RxJava – N suscriptores siempre escuchando”

Un poco de respuesta tardía, pero una opción un poco mejor para su scenarion que el BehaviorSubject podría ser BehaviorRelay de RxRelay lib . Y también para soluciones más globales cuando se necesitan diferentes comportamientos, pero quieren compartir punto único de interacción entre todos los módulos que puede utilizar RxHub

BehaviorSubject se ajustará a sus necesidades. https://github.com/Netflix/RxJava/wiki/Subject#behaviorsubject

Si necesita un comportamiento más sofisticado, siempre puede escribir su propia implementación de Subject . Parece bastante sencillo hacerlo.

Creo que es más simple si se utiliza BehaviorSubject con el operador switchOnNext.

SwitchOnNext () convierte un Observable que emite Observables (BehaviorSubject en este ejemplo) en un solo Observable que emite los ítems emitidos por los más recientemente emitidos de los Observables

El Observable devuelto por switchOnNext () se cancela la suscripción de la previamente emitida Observable empieza a emitir elementos de la última Observable

 public class PhotoModel{ BehaviorSubject<Observable<Photo>> subject = BehaviorSubject.create(...); public void setUserId(String id){ subject.onNext(Api.getUserPhoto(photoId)); } public Observable<Photo> subscribeToPhoto(){ return Observable.switchOnNext(subject); } } 

¿Cuándo se debe usar RxJava Observable y cuándo Callback simple en Android?

  • Cuándo cancelar una suscripción
  • Encadenamiento de RxJava observables con callbacks / listeners
  • Rx Java mergeDelayError no funciona como se esperaba
  • RxJava: Cómo convertir Lista de objetos en Lista de otros objetos
  • No se puede verificar la llamada de método de simulación desde el suscriptor de RxJava
  • RxJava + Retrofit + sondeo
  • ¿Por qué debounce () con toList () no funciona en RxAndroid?
  • CalledFromWrongThreadException incluso cuando se utiliza AndroidSchedulers.mainThread ()
  • No vuelva a ejecutar la llamada de Retrofit si todavía está en curso con RxJava 2
  • RxJava / Retrofit - ¿Cómo puedo obligar a los usuarios a usar una subclase específica de suscriptor?
  • RXJava - Dividir y combinar un Observable
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.