轉載地址:http://blog.csdn.net/yanbober/article/details/45667363java
public class MsgBean { private String msg; public MsgBean(String msg) { this.msg = msg; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } }
接收:(接收須要註冊)函數
//使用先註冊EventBus post
EventBus.getDefault().register(this);gradle
//退出activity取消EventBus this
EventBus.getDefault().unregister(this);spa
定義接收方法.net
//事件1接收者:在主線程接收 public void onEvent(String event){ mShowInfo1.setText(event); } //事件2接收者:在主線程接收自定義MsgBean消息 public void onEvent(MsgBean event){ mShowInfo21.setText(event.getMsg()); } //事件3接收者:在主線程接收 public void onEventMainThread(Integer event) { mShowInfo2.setText(event+""); }
Subscriber以onEvent開頭的4個函數區別:線程
onEvent:事件的處理在和事件的發送在相同的線程,因此事件處理時間不該太長,否則影響事件的發送線程。blog
onEventMainThread: 事件的處理會在UI線程中執行。事件處理時間不能太長,長了會出現臭名遠之的ANR。隊列
onEventBackgroundThread:事件的處理會在一個後臺線程中執行。雖然名字是BackgroundThread,事件處理是在後臺線程,但事件處理時間仍是不該該太長,由於若是發送事件的線程是後臺線程,會直接在當先後臺線程執行事件;若是當前線程是UI線程,事件會被加到一個隊列中,由一個線程依次處理這些事件,若是某個事件處理時間太長,會阻塞後面的事件的派發或處理。
onEventAsync:事件處理會在單獨的線程中執行,主要用於在後臺線程中執行耗時操做,每一個事件會開啓一個線程,但最好限制線程的數目。
發送:
EventBus.getDefault().post("test!");
EventBus.getDefault().post(new MsgBean("type"));
....
發送不用註冊
總結: