既然是簡單粗暴,就不寫什麼EventBus詳細介紹了,這裏有源碼詳解和具體使用方法https://www.jianshu.com/p/6da03454f75a函數
首先:post
一、添加依賴。this
1 implementation 'org.greenrobot:eventbus:3.0.0'
二、定義一個消息事件類;spa
/** * 傳遞消息時使用,能夠本身增長更多的參數,不限制類型 */
public class EventMsg { private String Tag; private String Msg; public String getTag() { return Tag; } public String getMsg() { return Msg; } public void setTag(String tag) { Tag = tag; } public void setMsg(String msg){ Msg = msg; } }
三、註冊EventBus,在要接收消息的頁面註冊.net
1 /*register EventBus*/
2 if (!EventBus.getDefault().isRegistered(this)) { 3 EventBus.getDefault().register(this); 4 }
四、發送消息。線程
1 /**
2 * 發送鏈接狀態消息 3 * 4 * @param constants 5 */
6 private void sendEventMsg(String msg) { 7 EventMsg msg = new EventMsg(); 8 msg.setTag(msg); 9 EventBus.getDefault().post(msg); 10 }
五、接收消息;code
1 @Subscribe(threadMode = ThreadMode.MAIN) 2 public void skipToMainActivity(EventMsg msg) { 3 //在這裏經過msg讀取
4 msg.getTag(); 5 } 6
接受消息有四個函數:blog
1 public void onEvent(AnyEventType event) {} 2 public void onEventMainThread(AnyEventType event) {} 3 public void onEventBackgroundThread(AnyEventType event) {} 4 public void onEventAsync(AnyEventType event) {}
onEvent:若是使用onEvent做爲訂閱函數,那麼該事件在哪一個線程發佈出來的,onEvent就會在這個線程中運行,也就是說發佈事件和接收事件線程在同一個線程。使用這個方法時,在onEvent方法中不能執行耗時操做,若是執行耗時操做容易致使事件分發延遲。
onEventMainThread:若是使用onEventMainThread做爲訂閱函數,那麼不論事件是在哪一個線程中發佈出來的,onEventMainThread都會在UI線程中執行,接收事件就會在UI線程中運行,這個在Android中是很是有用的,由於在Android中只能在UI線程中跟新UI,因此在onEvnetMainThread方法中是不能執行耗時操做的。
onEventBackground:若是使用onEventBackgrond做爲訂閱函數,那麼若是事件是在UI線程中發佈出來的,那麼onEventBackground就會在子線程中運行,若是事件原本就是子線程中發佈出來的,那麼onEventBackground函數直接在該子線程中執行。
onEventAsync:使用這個函數做爲訂閱函數,那麼不管事件在哪一個線程發佈,都會建立新的子線程在執行onEventAsync. 事件
六、解除註冊ip
1 EventBus.getDefault().unregister(this);