當一個Android應用功能愈來愈多的時候,保證應用的各個部分之間高效的通訊將變得愈來愈困難。如何優雅地解決這個問題?這時候,就可使用到EventBus。android
EventBus是GreenRobot出品的Android系統的一個Event Bus類庫,同類的還有Otto(基於註解),都是用來簡化應用組件之間的通訊。git
使用以下:github
Implement any number of event handling methods in the subscriber:網絡
public void onEvent(AnyEventType event) {}
app
Register subscribers:異步
eventBus.register(this);
post
Post events to the bus:this
eventBus.post(event);
spa
Unregister subscriber:線程
eventBus.unregister(this);
EventBus提供了幾種ThreadMode線程模型來處理事件,這個自己是能夠擴展的,你徹底能夠按照本身的須要來自定義你所須要的線程模型:
PostThread:事件響應就在事件發佈的線程,即時響應。
MainThread::事件響應在android的主線程也即UI線程,即時響應。
BackGroundThread:事件響應在後臺線程。當事件發佈在工做線程時,事件處理就在這個工做線程;當事件發佈在主線程時,就另開一個惟一的工做線程來線性的響應事件。即時響應:
Asyn:事件響應在一個獨立的工做線程,與事件發佈的線程和主線程不一樣。通常用來來處理一些耗時的操做如網絡數據等,儘可能避免同時觸發大量的異步線程,EventBus內部使用了一個線程池來複用線程。
EventBus支持StickyEvents,實際使用中,某個事件可能屢次使用,可是咱們須要最新的事件信息,好比不停更新的地理位置信息,這個時候你就能夠將其發佈爲StickyEvent,它自己會cache最近的同類型的事件,經過post和get方法cache和獲取。postSticky(Object event),getStickyEvent(Class<?> eventType)。