標籤:android style blog class code c
Otto是由Square發布的一個著重於Android支援的基於Guava的強大的事件匯流排,在對應用程式不同部分進行解耦之後,仍然允許它們進行有效溝通。
開源項目地址:https://github.com/square/otto
使用說明:http://square.github.io/otto/
以下文字來源於官方說明加上自己的體會。
1,使用
建立一個事件匯流排執行個體:
Bus bus = new Bus();
因為Bus是唯一有效(如果它是共用匯流排),我們建議通過注射或其他適當的方式來獲得執行個體。即使用全域唯一的共用對象
2,發布
事件發布是Bus最重要的組成部分,它允許你告訴subscribers 發生了一個行為。任何類的執行個體發行就緒在Bus匯流排上,它只會被派遣到subscribers 類型。
發布一個新的事件,調用方法:
bus.post(new AnswerAvailableEvent(42));
發布到匯流排是一種同步動作,程式同時繼續執行,這是保證所有的subscribers 被調用。
3,SUBSCRIBING
訂閱是事件發布它讓你得到通知,事件已發生的補充。訂閱事件,標註方法與“訂閱。該方法只需要一個參數,其類型將你想訂閱事件。
聽事件發表在上一節中我們將需要以下:
@Subscribe public void answerAvailable(AnswerAvailableEvent event) { // TODO: React to the event somehow!}
方法的名稱可以是任何你喜歡的東西。注釋,單一參數,和公用訪問的所有要求。
為了接收事件,一個類的執行個體需要註冊到匯流排。如果this指的是類的一個執行個體,作為之前方法的提供者,我們可以使用下面的代碼來註冊:
bus.register(this);
4,線程的執行
當你用線程接收回調的時候,有時是模糊的,otto提供一個強制機制,確保你總是得到你需要的線程。預設情況下,所有相互作用的執行個體是限於主線程。
// Both of these are functionally equivalent.Bus bus1 = new Bus();Bus bus2 = new Bus(ThreadEnforcer.MAIN);
如果你不關心,線程的互動發生,執行個體化一個匯流排執行個體就行。如果你需要額外的功能或驗證,可以自己實現threadenforcer介面。