EventBus

 轉載地址:http://blog.csdn.net/yanbober/article/details/45667363java

  1. 在工程gradle中添加:compile ‘de.greenrobot:eventbus:2.4.0’。
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"));

....

發送不用註冊

總結:

  1. 定義事件類型(或者不定義)。例如:MsgBean等
  2. 定義事件處理方法。例如:onEvent等
  3. 註冊訂閱者。例如:EventBus.getDefault().register(this)
  4. 發送事件。例如:EventBus.getDefault().post(new MyEvent())
相關文章
相關標籤/搜索