EventBus github 地址
在Android Studio中添加如下依賴:
compile 'org.greenrobot:eventbus:3.1.1'
EventBus 的使用
- 創(chuàng)建事件實(shí)體類
當(dāng)使用EventBus從一個組件向另外一個組件發(fā)送的信息,可以是儲存在一個類中,該類就是一個事件熬词,會被EventBus發(fā)送給訂閱者沧卢。
public class MessageEvent {
private String message;
public MessageEvent(String message){
this.message = message;
}
public String getMessage(){
return message;
}
}
- 向EventBus注冊削解,成為訂閱者以及解除注冊
EventBus.getDefault().register(this);
通過上面代碼便可以為當(dāng)前類注冊蜓耻,成為訂閱者存哲,一般在類初始化時注冊母蛛,如果是Activity則在onCreate()方法中進(jìn)行注冊翩剪。
EventBus.getDefault().unregister(this);
當(dāng)訂閱者不再需要接受事件時候,需要解綁彩郊,釋放內(nèi)存肢专。
- 聲明訂閱方法
@Subscribe(threadMode = ThreadMode.MAIN,priority = 100,sticky = true)
public void test(String str){
}
在需要接受方法上面設(shè)置@Subscribe
即可,
threadMode 表示在那個線程執(zhí)行此方法焦辅,
priority 表示執(zhí)行的優(yōu)先級博杖,
sticky 表示是否粘性。
需要注意的是本方法必須為public筷登,并且參數(shù)必須為一個剃根,這個我們在后面源碼分析中會解釋。
- .發(fā)送事件
EventBus.getDefault().post(EventType eventType);
與觀察者模式類似前方,當(dāng)有事件發(fā)生時狈醉,需要通知觀察者廉油。這個方法就是通知觀察者的方法,EventBus在底層進(jìn)行了封裝苗傅。
ThreadMode分析
POSTING:表示在發(fā)送事件的線程執(zhí)行方法抒线。
MAIN: 表示在主線程執(zhí)行方法。
BACKGROUND:表示在子線程執(zhí)行方法渣慕。
ASYNC:表示在非當(dāng)前線程執(zhí)行方法嘶炭,會重新創(chuàng)建一個新的線程執(zhí)行方法。
priority 優(yōu)先級
設(shè)置該優(yōu)先級的目的是逊桦,當(dāng)一個事件有多個訂閱者的時候眨猎,優(yōu)先級高的會優(yōu)先接收到事件。
sticky 粘性事件
在注冊之前便把事件發(fā)生出去强经,等到注冊之后便會收到最近發(fā)送的粘性事件(必須匹配)睡陪。注意:只會接收到最近發(fā)送的一次粘性事件,之前的會接受不到匿情。
總結(jié)
至此EventBus的使用方式就講到這里兰迫,下面看EventBus的源碼解析。