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