EventBus簡單理解

2021-08-16 12:43:04 字數 1924 閱讀 4946

eventbus是一款針對android優化的發布/訂閱事件匯流排。主要功能是替代intent,handler,broadcast在fragment,activity,service,執行緒之間傳遞訊息.優點是開銷小,**更優雅。以及將傳送者和接收者解耦。

那麼eventbus應該怎麼使用呢。

1.首先我們在要使用eventbus的activity中註冊乙個事件:   eventbus.getdefault.register(this);  通過該方法可以註冊乙個事件

2.那麼eventbus主要是用來傳值的 ,那麼我們需要自己定義乙個類用於訊息的載體。

自己定義乙個類,定義訊息中需要的值,定義構造方法,定義get方法------------可以在收到該類的物件後獲取到其中的資訊

3.我們在做好準備工作後,就應該來傳遞資訊了,首先我們先在需要發布事件的方法中發布事件   eventbus.getdefault.post(new message(name,password));其中的引數是我們自定義的類。那麼我們在執行這個方法的時候就已經將需要傳遞的資訊傳遞出去了。

4.接收,我們接收值有4中情況

(1)  @subscribe(threadmode = threadmode.main)   註解中的模式為main   意思就是處理這個訊息的方法在主線程執行,所以可以對ui介面進行處理,當然耗時操作就不要使用這種方法了,會導致程式無響應 anr

(2) @subscribe(threadmode  = threadmode.asyc)  模式為非同步執行緒,就是說只要接收到事件,那麼這個方法就會開闢乙個新的子執行緒進行執行,這樣的話不能對ui介面進行操作,但是可以進行耗時操作,但是較為耗費記憶體,所以看情況使用

(3)@subscribe(threadmode = threadmode.background)  如果呼叫這個方法的不是主線程,那麼直接在該執行緒中執行,如果是主線程,那麼會新開闢乙個子執行緒,但是只要是呼叫了這個方法,他們都會在乙個子執行緒之間執行,所以使用這種方法要避免耗時操作,否則容易anr,但是如果只是傳遞資訊,那麼推薦使用

(4)@subscribe(threadmode = threadmode.posting)預設的模式,直接在發布事件的執行緒中執行,效能消耗最小

5.銷毀

為了避免記憶體洩漏,使用完之後我們需要將這個事件銷毀,eventbus.getdefault.unregister(this);

關於粘性事件

——    普通的事件我們在發布出來之後,被已經定義好的方法接受之後這個事件就已經被消耗了,如果我們想要再次使用這個事件那麼就需要我們再次發布。但是如果我們已經跳轉到乙個activity中,就需要我們自己再在這個activity中寫一遍這個**,這樣的話我們的傳值,各個方面都比較麻煩。那麼這個時候使用黏性事件就出現了,在發布黏性事件之後,我們如果再註冊乙個事件,那麼這個事件會自動將我們之前發布的資訊接收進行處理,這就是粘性事件的好處。那麼我們如果不需要這個事件了怎麼辦,我們可以使用eventbus.getdefault.removeallstickevents();方法來移除粘性事件

——   粘性事件的發布:eventbus.getdefault.poststicky();

——   粘性事件的接受:@subscribe(threadmode = threadmode.main , sticky = true);

EventBus的簡單理解

1.新增依賴compile org.greenrobot eventbus 3.0.0 2.定義乙個類,有參構造方法。我的簡單的理解 接收方和傳送方和eventbus的關係 接收方相當於訂閱報紙,傳送方相當於報社,eventbus相當於送報紙的人,只有你先訂閱了報紙,報社會讓人給你去送報紙 所以想讓...

EventBus基本理解

eventbus是乙個android端優化的publish subscribe訊息匯流排,簡化了應用程式內各元件間 元件與後台執行緒間的通訊。比如請求網路,等網路返回時通過handler或broadcast通知ui,兩個fragment之間需要通過listener通訊,這些需求都可以通過eventb...

EventBus簡單實用

本人使用eventbus是在baseacitivity中的oncreate方法中註冊,就不需要一直註冊和取消註冊。oncreate 方法中註冊 eventbus.getdefault register this 在ondestroy 方法中取消註冊 eventbus.getdefault unreg...