0

這是從這個帖子 How to use GreenRobot's EventBus in broadcasting events from Service to Activity?使用GreenRobot的EventBus從Service到Activity替換廣播發送和接收事件狀態是否好?

我的使用情況下,圍繞着服務和活動的後續行動。

服務用於跟蹤BLE連接中的更改。

活動用於向UI報告連接狀態。

現有方案。服務是利用廣播發送的事件(通過sendBroadcast()方法)的每個狀態各地BLE 旋轉(連接/斷開,有數據,等..)

我的疑問:我可以利用這個GreenRobot的EventBus圖書館以與廣播相同的方式來控制(發送和接收事件)?如果是這樣,有什麼我應該考慮(關於線程安全)或必須知道,而完全替換廣播控制(發送和接收)範例。

回答

3

我目前使用Otto(非常類似於EventBus)來完成你想要做的事情。

我有一個服務,它持有一個計時器,並顯示一個持久通知。通知的每次更新還會發布活動的最新信息以接收並更新UI。

它很容易實現與奧托(也可能是EventBus,我沒有使用特定的圖書館),因爲我需要發送4條信息,每次我發佈一些信息,它增長繁瑣,以​​增加額外每次都使用普通的sendBroadcast()系統。

切換到Otto後我還沒有任何問題,它幫助我清理了很多我的代碼。

有一點需要注意(使用Otto atleast)是默認設置爲只允許在主線程上發佈/訂閱,而當您使用服務時,您必須對其進行編輯。我不確定EventBus是否具有相同的功能,但在文檔中注意它。

+0

「有一點需要注意(至少與Otto一樣),它默認設置爲只允許在主線程上發佈/訂閱,而當您使用服務時,您必須對其進行編輯。」 >>編輯Kasper? –

+0

由於您使用的服務在另一個線程中運行,因此您必須將Otto設置爲允許從所有線程(而不僅僅是主線程)發佈和訂閱,否則它將無法工作。在他們的github頁面上有一個完整的指南。 – Moonbloom

相關問題