android開源項目之OTTO事件匯流排(一)

來源:互聯網
上載者:User

標籤: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介面。

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.