Android 開源框架:EventBus Android

dc4g 9年前發布 | 10K 次閱讀 Android Android開發 移動開發

背景介紹

如果你學習過設計模式,那么當想通知其他組件某些事情發生時你一定會使用觀察者模 式。好了,既然能想到這個設計模式,那么就來看一個屌爆天的Android開源框架EventBus。主要功能是替代Intent、Handler、 BroadCast在Fragment、Activity、Service、線程之間傳遞消息。他的最牛逼優點是開銷小,代碼簡潔,解耦代碼。

基礎介紹

    上面說了,EventBus是一個觀察者模式的實現,既然這樣,那他就有如下三個要素:

  • Event:事件

  • Subscriber:事件訂閱者,接收特定的事件。

  • Publisher:事件發布者,用于通知Subscriber有事件發生。

其 中,Event可以使任意類型對象。Subscriber都是以約定的onEvent開頭的函數,具體是 onEvent,onEventMainThread,onEventBackgroundThread,onEventAsync這四個。 Publisher可以通過post(Object)在任意線程任意位置發送事件。

官方這個圖就很直觀的說明了這種觀察者模式的架構:

這里寫圖片描述

依據開源庫組件的說明文檔來操作:

  1. 在工程gradle中添加:compile ‘de.greenrobot:eventbus:2.4.0’。

  2. 按照文檔HOWTO.md進行操作。

Subscriber以onEvent開頭的4個函數區別:

  • onEvent:事件的處理在和事件的發送在相同的線程,所以事件處理時間不應太長,不然影響事件的發送線程。

  • onEventMainThread: 事件的處理會在UI線程中執行。事件處理時間不能太長,長了會出現臭名遠之的ANR。

  • onEventBackgroundThread: 事件的處理會在一個后臺線程中執行。雖然名字是BackgroundThread,事件處理是在后臺線程,但事件處理時間還是不應該太長,因為如果發送事 件的線程是后臺線程,會直接在當前后臺線程執行事件;如果當前線程是UI線程,事件會被加到一個隊列中,由一個線程依次處理這些事件,如果某個事件處理時 間太長,會阻塞后面的事件的派發或處理。

  • onEventAsync:事件處理會在單獨的線程中執行,主要用于在后臺線程中執行耗時操作,每個事件會開啟一個線程,但最好限制線程的數目。

項目主頁:http://www.baiduhome.net/lib/view/home/1439887717942

 本文由用戶 dc4g 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!