版權聲明:歡迎轉載,轉載請註明出處-->http://blog.csdn.net/angcyojava
當你來到此處, 你應該已經知道了EventBus是幹嗎的了吧? (不知道的自行百度….)
我就不闡述了, 說說區別和使用方法吧!git
EventBus 在新版(3.0beta)中取消了原來(2.+)的使用方式:github
public void onEvent(MessageEvent event) { log(event.message); }
public void onEventMainThread(MessageEvent event) { textField.setText(event.message); }
public void onEventBackgroundThread(MessageEvent event){ saveToDisk(event.message); }
變成了:json
@Subscribe(threadMode = ThreadMode.MainThread) //在ui線程執行 public void onUserEvent(UserEvent event) { }
@Subscribe(threadMode = ThreadMode.BackgroundThread) //在後臺線程執行 public void onUserEvent(UserEvent event) { }
@Subscribe(threadMode = ThreadMode.Async) //強制在後臺執行 public void onUserEvent(UserEvent event) { }
@Subscribe(threadMode = ThreadMode.PostThread) //默認方式, 在發送線程執行 public void onUserEvent(UserEvent event) { }
因爲官方 文檔 尚未更新, 特此記錄,
官方文檔: https://github.com/greenrobot/EventBus/blob/master/HOWTO.md#delivery-threads-and-threadmodeside
1:EventBus 的簡單使用:post
//在Activity中,註冊和反註冊(通用的寫法) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); EventBus.getDefault().register(this); //第1步: 註冊 } @Override protected void onDestroy() { super.onDestroy(); EventBus.getDefault().unregister(this);//反註冊 } //在註冊了的Activity中,聲明處理事件的方法 @Subscribe(threadMode = ThreadMode.BackgroundThread) //第2步:註冊一個在後臺線程執行的方法,用於接收事件 public void onUserEvent(ClassEvent event) {//參數必須是ClassEvent類型, 不然不會調用此方法 } //----------華麗的分割線--------------- //在任意地方,調用發送事件 EventBus.getDefault().post(new ClassEvent());//第3步: 發送事件 //----------華麗的分割線--------------- //在任意地方,註冊事件類 public static class ClassEvent{ } //定義一個事件, 能夠不包含成員變量,和成員方法 //固然你也能夠定義包含成員變量的事件, 用來傳遞參數 public class MsgEvent { public String jsonData; public MsgEvent(String jsonData) { this.jsonData = jsonData; } }
2:Sticky事件的使用
以前說的使用方法, 都是須要先註冊(register), 再post,才能接受到事件;
若是你使用postSticky發送事件, 那麼能夠不須要先註冊, 也能接受到事件.ui
首先,你可能須要聲明一個方法:this
//注意,和以前的方法同樣,只是多了一個 sticky = true 的屬性. @Subscribe(threadMode = ThreadMode.MainThread, sticky = true) public void onEvent(MsgEvent event){ }
其次, 你能夠在沒有register的狀況下:(發送事件)spa
EventBus.getDefault().postSticky(new MsgEvent("With Sticky"));
以後, 再註冊,這樣就能夠收到剛剛發送的事件了:.net
EventBus.getDefault().register(this);//註冊以後,立刻就能收到剛剛postSticky發送的事件
3:參數說明:
/** * threadMode 表示方法在什麼線程執行 (Android更新UI只能在主線程, 因此若是須要操做UI, 須要設置ThreadMode.MainThread) * sticky 表示是不是一個粘性事件 (若是你使用postSticky發送一個事件,那麼須要設置爲true才能接受到事件) * priority 優先級 (若是有多個對象同時訂閱了相同的事件, 那麼優先級越高,會優先被調用.) * */ @Subscribe(threadMode = ThreadMode.MainThread, sticky = true, priority = 100) public void onEvent(MsgEvent event){ }
源碼地址: https://github.com/angcyo/EventBus3.0Demo
1.使用步驟:
compile 'org.greenrobot:eventbus:3.0.0'
EventBus.getDefault().register(this); //第1步: 註冊
EventBus.getDefault().unregister(this);//反註冊
//發送消息方
EventBus.getDefault().post("reflash");
//接受方:
@Subscribe //第2步:註冊一個在後臺線程執行的方法,用於接收事件
public void onEventMainThread(String event) {}遇到問題:暫無