我正在用Android应用程序替换EventBus模式RxJava.我有事件提醒任何感兴趣的各方我的缓存单例中的数据更新.每次调用Web服务时,都会更新数据,并通过发布的事件通知订阅者.
我在RxJava中有一些接近这个设置的东西AsyncSubject.观察者从主题中获得单个事件,但随后他们获得了一个onComplete事件并取消订阅.这首先加载UI,但是当需要刷新数据时,不会通知订阅者.我怎么告诉那些Subscribers人继续听取更多的onNext事件Subject呢?
我需要一个Subject会报告最新项目的.PublishSubject只在订阅后发出项目,因此它不能满足我的需求.我的订阅者在不同的时间(可能在第一个数据事件之后)开始观察,因此我需要主题发出最后观察的项目,然后保持流为后续项目打开.似乎AsyncSubject和PublishSubject的组合就是我所需要的.有没有办法用内置类来实现这一点,还是我需要创建自己的主题?
WebServiceObservable OR CacheObservable
^
|
AsyncSubject
^
|
/ \
/ \
/ \
UiObserver1 UiObserver2
Run Code Online (Sandbox Code Playgroud)
BehaviorSubject将满足您的需求.
https://github.com/Netflix/RxJava/wiki/Subject#behaviorsubject
如果您需要更复杂的行为,您可以随时编写自己的Subject实现.这样做似乎非常简单.
一个较晚的答案,但是对于您的方案而言,比BehaviorSubject更好的选择可能是RxRelay lib中的 BehaviorRelay 。当您需要不同的行为但又希望在所有模块之间共享单点交互时,也可以使用更多的全局解决方案,您可以使用RxHub