既然是简单粗暴,就不写什么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);