Android 開源框架:EventBus Android
背景介紹
如果你學習過設計模式,那么當想通知其他組件某些事情發生時你一定會使用觀察者模 式。好了,既然能想到這個設計模式,那么就來看一個屌爆天的Android開源框架EventBus。主要功能是替代Intent、Handler、 BroadCast在Fragment、Activity、Service、線程之間傳遞消息。他的最牛逼優點是開銷小,代碼簡潔,解耦代碼。
基礎介紹
上面說了,EventBus是一個觀察者模式的實現,既然這樣,那他就有如下三個要素:
-
Event:事件
-
Subscriber:事件訂閱者,接收特定的事件。
-
Publisher:事件發布者,用于通知Subscriber有事件發生。
其 中,Event可以使任意類型對象。Subscriber都是以約定的onEvent開頭的函數,具體是 onEvent,onEventMainThread,onEventBackgroundThread,onEventAsync這四個。 Publisher可以通過post(Object)在任意線程任意位置發送事件。
官方這個圖就很直觀的說明了這種觀察者模式的架構:
依據開源庫組件的說明文檔來操作:
-
在工程gradle中添加:compile ‘de.greenrobot:eventbus:2.4.0’。
-
按照文檔HOWTO.md進行操作。
Subscriber以onEvent開頭的4個函數區別:
-
onEvent:事件的處理在和事件的發送在相同的線程,所以事件處理時間不應太長,不然影響事件的發送線程。
-
onEventMainThread: 事件的處理會在UI線程中執行。事件處理時間不能太長,長了會出現臭名遠之的ANR。
-
onEventBackgroundThread: 事件的處理會在一個后臺線程中執行。雖然名字是BackgroundThread,事件處理是在后臺線程,但事件處理時間還是不應該太長,因為如果發送事 件的線程是后臺線程,會直接在當前后臺線程執行事件;如果當前線程是UI線程,事件會被加到一個隊列中,由一個線程依次處理這些事件,如果某個事件處理時 間太長,會阻塞后面的事件的派發或處理。
-
onEventAsync:事件處理會在單獨的線程中執行,主要用于在后臺線程中執行耗時操作,每個事件會開啟一個線程,但最好限制線程的數目。