EventBus和Otto第三方

2021-09-24 14:27:28 字數 1941 閱讀 6247

eventbus能夠簡化各元件間的通訊,讓我們的**書寫變得簡單,能有效的分離事件傳送方和接收方(也就是解耦的意思)。

event 事件。它可以是任意型別。

subscriber 事件訂閱者。

publisher 事件的發布者。我們可以在任意執行緒裡發布事件,一般情況下,使用eventbus.getdefault()就可以得到乙個eventbus物件,然後再呼叫post(object)方法即可。

posting (預設) 表示事件處理函式的執行緒跟發布事件的執行緒在同乙個執行緒。

main 表示事件處理函式的執行緒在主線程(ui)執行緒,因此在這裡不能進行耗時操作。

background 表示事件處理函式的執行緒在後台執行緒,因此不能進行ui操作。如果發布事件的執行緒是主線程(ui執行緒),那麼事件處理函式將會開啟乙個後台執行緒,如果果發布事件的執行緒是在後台執行緒,那麼事件處理函式就使用該執行緒。

async 表示無論事件發布的執行緒是哪乙個,事件處理函式始終會新建乙個子執行緒執行,同樣不能進行ui操作。

1.新增依賴 compile 'org.greenrobot:eventbus:3.1.1'

2.註冊eventbus --

-oncreate

()方法中

3.取消註冊eventbus --

ondestry

()方法中

4.明確指定訂閱者,通過引數來傳遞訊息,同時可以指定方法在主線程中執行

5.post發布訊息

1.新增依賴

implementation 'org.greenrobot:eventbus:3.0.0'
2.定義訊息事件類

public

class

messageevent

public string getmessage()

public

void

setmessage

(string message)

}

3.註冊和解除註冊+宣告訂閱者+事件發布

分別在activity的oncreate()方法和ondestory()方法裡,進行註冊eventbus和解除註冊。

注意:訂閱者的方法必須被public修飾
public

class

firstactivity

extends})

;}//宣告訂閱者

@subscribe

(threadmode = threadmode.main)

public

void

event

(messageevent messageevent)

//解除註冊

@override

protected

void

ondestroy()

}}

1

, 匯入依賴 implementation 'com.squareup:otto:1.3.8'2--

-- 單例模式 , 返回bus 的子類物件

3getinstance()

.register

(this);

4, 在ondestry

() 方法中取消註冊

@override

protected

void

ondestroy()

5. 宣告訂閱者

@subscribe

public

void

receivemessage

(string result)

6, 發起訂閱 -- 主線程中

getinstance()

.post

("otto 返回的資料"

);

第三方開源庫 EventBus 原始碼分析和手寫

eventbus官方介紹為乙個為android系統優化的事件訂閱匯流排,它不僅可以很方便的在同執行緒中傳遞事件或者物件,還可以在不同執行緒中實現事件或物件的傳遞,用法比較簡單,可以很好地完成一些在原生系統中的intent,handler等可以完成的工作,在android開發過程中用途及其廣泛。當然這...

觀察者模式和EventBus

在熟悉一些專案的時候,發現專案中的一些設計模式,之後會慢慢寫。這裡就寫專案中的觀察者的使用。觀察者模式在被觀察者和觀察者之間建立乙個抽象的耦合。被觀察者角色所知道的只是乙個具體觀察者列表,每乙個具體觀察者都符合乙個抽象觀察者的介面。被觀察者並不認識任何乙個具體觀察者,它只知道它們都有乙個共同的介面。...

類和物件第三講

類和物件第三講 還是先來繼續介紹建構函式,今天想談談帶引數的建構函式。例 求乙個長寬高分別為 1 12 25,30。2 15,30,21.的長方體的體積。include using namespace std class box box box int h1,int w1,int l1 void b...