2015-06-17 28 views
0

我想@訂閱一個由ScheduledFuture創建的Runnable中的方法,這樣我就可以從另一個線程發出它是否運行的信號。由於ScheduledFuture會在將來某個時間創建該對象,因此@Subscribe偵聽器沒有範圍來接收我的事件。所以,我想知道一個事件在公共汽車中逗留多久,等待聽衆收聽?實際的pub-sub同步發送/接收事件還是會在超時之前在隊列中持續一段時間?活動在事件總線中生活多久?

謝謝。

+0

聽起來好像你正在尋找在新用戶註冊時重播的「粘性」事件。 Guava的活動巴士不會默認提供此功能。我是否正確理解您的用例? –

+0

聽起來和我要找的完全一樣。 –

回答

3

番石榴的EventBus不提供粘性事件。此外,由於EventBus的設計,它不像它可以擴展它來實現這樣一個粘性設計那樣簡單,因爲很多內部都是包私有的(例如,發現註冊對象上的哪些方法是邏輯的註釋Subscribe並將它們映射到適當的事件類型)。

我確實認爲還有其他一些圖書館可以提供此功能,例如GreenRobot的活動巴士(https://github.com/greenrobot/EventBus),但是如果沒有引入新的圖書館,您必須從頭開始構建它。

我使用的替代方案是RxJava的Observablesreplay(1)運算符,因此訂閱observable將始終使用最後一項立即調用訂閱回調,但它不是插入替換。

+1

同上RxJava。正是我想要建議的。那個圖書館改變了我的生活,甚至超過了Google Guava。它有一條學習曲線,但反應式編程確實擅長解決這些問題。 – tmn

相關問題