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...