是什么:
就是用來發消息通信的
怎么用:
-
定義事件:(消息體)
public class MessageEvent { /* Additional fields if needed */ }
-
准備訂閱者:聲明並注釋您的訂閱方法,可選擇指定一個線程模式
@Subscribe(threadMode = ThreadMode.MAIN) public void onMessageEvent(MessageEvent event) {/* Do something */}; //粘性事件 @Subscribe (threadMode = ThreadMode.ASYNC,sticky = true) public void myEventBusMessageASYNC(MyMessageEvent myMessageEvent){ Log.e("EventBus","MyEventBusActivity2 ThreadMode.ASYNC 執行Thread = "+Thread.currentThread().getName()+"------------"+myMessageEvent.name); }
- 線程模式選擇:
- ThreadMode:POSTING 訂閱者將在發布事件的同一線程中調用。這是默認值
- ThreadMode:MAIN 訂閱者在主線程中執行
- ThreadMode:MAIN_ORDERED 按照發布順序執行
- ThreadMode: BACKGROUND 如果發布在主線程,則新開一個線程,
- ThreadMode: ASYNC 新的獨立線程中執行
- 注冊和注銷您的訂閱者。例如,在Android上,活動和片段通常應根據其生命周期進行注冊
@Override public void onStart() { super.onStart(); EventBus.getDefault().register(this); } @Override public void onStop() { super.onStop(); EventBus.getDefault().unregister(this); }
- 發布活動:
EventBus.getDefault().post(myMessageEvent);
EventBus.getDefault().postSticky(myMessageEvent);
舉例:
- 添加依賴:
implementation 'org.greenrobot:eventbus:3.1.1'
- 創建一個事件,(消息體)
public class MyMessageEvent { public String name = ""; public MyMessageEvent(String name) { this.name = name; } }
- 注冊,注銷訂閱者,按照生命周期來
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my_event_bus); EventBus.getDefault().register(this); } @Override protected void onDestroy() { super.onDestroy(); EventBus.getDefault().unregister(this); }
- 准備訂閱者
@Subscribe (threadMode = ThreadMode.MAIN) public void myEventBusMessage(MyMessageEvent myMessageEvent){ Log.e("EventBus","name = "+myMessageEvent.name); }
//粘性事件@Subscribe (threadMode = ThreadMode.ASYNC,sticky = true)
public void myEventBusMessageASYNC(MyMessageEvent myMessageEvent){
Log.e("EventBus","MyEventBusActivity2 ThreadMode.ASYNC 執行Thread = "+Thread.currentThread().getName()+"------------"+myMessageEvent.name);
} - 發布活動
MyMessageEvent myMessageEvent = new MyMessageEvent("1"); EventBus.getDefault().post(myMessageEvent);
//粘性事件
EventBus.getDefault().postSticky(myMessageEvent);
參考:
http://greenrobot.org/eventbus/documentation/