Otto是一個提供事件總線實施的開源項目。組件可以發(fā)布和訂閱事件。
Otto是Google?的Guava事件總線庫的一個分支,并且已被重新設(shè)計以盡可能支持Android。與Guava事件總線不同,Otto不考慮基類或接口的事件訂閱。這樣做是為了提高庫的性能,并保持應(yīng)用程序代碼簡單明了。
如果您使用Maven或Gradle作為構(gòu)建系統(tǒng),您可以簡單地為其添加依賴關(guān)系
在gradle中配置:


您也可以從Download Otto手動下載?JAR?,并將其添加到應(yīng)用程序的類路徑中
如何設(shè)置Otto?
要使用Otto,請創(chuàng)建Bus該類的單例實例并為您的Android組件提供訪問權(quán)限。這通常是在應(yīng)用程序的Application對象中完成的

這里使用了ThreadEnforcer.MAIN參數(shù)。這強制Otto始終從主線程發(fā)送事件。如果你希望能夠從任何線程發(fā)送事件,請使用ThreadEnforcer.ANY參數(shù)。
如何注冊和注銷事件?
事件注冊是通過@Subcribe公共單參數(shù)方法的注釋完成的。方法參數(shù)是事件鍵,即如果通過Otto事件總線發(fā)送這種數(shù)據(jù)類型,則調(diào)用該方法。
事件接收者必須通過該類的register方法進(jìn)行注冊Bus。

事件注銷使用該unregister()方法。
如何發(fā)送活動
發(fā)送事件,不需要注冊事件總線

新組件如何接收一個事件?
有時,新組件,如動態(tài)創(chuàng)建的fragment,應(yīng)該在創(chuàng)建過程中接收事件數(shù)據(jù)。如果這個案件組件可以注冊為這種事件數(shù)據(jù)的注冊制作者@Produce。
有時,新組件,如動態(tài)創(chuàng)建的fragment,應(yīng)該在創(chuàng)建過程中接收事件數(shù)據(jù)。如果這個案件組件可以注冊為這種事件數(shù)據(jù)的注冊制作者@Produce。
事件接收者必須通過該類的register方法進(jìn)行注冊Bus。

例子:
將依賴關(guān)系添加到build.gradle文件中。

activity_main.xml布局文件應(yīng)該如下所示

fragment_main.xml的布局文件


這個例子是故意簡單的。在真正的應(yīng)用中,將Bus在Application該類中創(chuàng)建單例。