2017-09-11 84 views
1

我嘗試使用rx和PublishSubject。所以我創建對象:爲什麼PublishSubject不會發出第一個元素

PublishSubject<MyEvent> events = PublishSubject.create();

,在我服務,我擺在那MyEvent

events.onNext(new MyEvent);

所以有時候我沒有收到第一個事件,但第二次我接收。 有時我會收到所有的事件。任何人都可以解釋一下,這裏有什麼問題?

回答

4

PublishSubject將事件發送給所有「當前預訂」的訂閱者。它不會發射給未來訂閱的訂閱者。

BehaviorSubject訂閱時會發出最後一個已知的值,然後表現得像PublishSubject。我的猜測是,這是你期望的行爲。

+0

我在我的服務的'onCreate'上訂閱我的事件 – shmakova

+0

請注意,默認情況下RxJava不是線程安全的,如果您從多個異步源發出事件,則需要將主題封裝到「SerializedSubject」保持線程安全。 – Kiskae

+0

如果您有任何異步,除非您明確地使用'subscribe()'後跟'onNext()',否則對於訂閱事件和訂閱沒有真正的保證。 'BehaviorSubject'是這類事情的途徑。 –

相關問題