这个其实和Intent传值差不多,但我们用Intent传值的时候消耗非常大,这个消耗就非常小了,我们可以看到,
手机页面都没有看到Activity的切换,也没有闪动;
首先需要导入依赖
compile 'org.greenrobot:eventbus:3.0.0'
先来介绍普通的事件(这个就类似我么的startActivityForResult())
然后就是写代码了,首先是要注册:
EventBus.getDefault().register(MainActivity.this);
然后就是我们要启动的Activity
Intent intent = new Intent(getApplicationContext(), JIeshou.class); startActivity(intent);
然后就是我们要发送的东西,要在我们要发送的Activity中写:
EventBus.getDefault().post(new AnyEventType("接受到了")); finish();
然后我们又要在MainActivity中接受了:
@Subscribe(threadMode = ThreadMode.MAIN) public void userEventBus(AnyEventType userEvent){ tv.setText(userEvent.getmMsg()); }
接受完之后我们将他销毁掉:
@Override protected void onDestroy() { super.onDestroy(); //注销注册 EventBus.getDefault().unregister(this); }
这要就是一套传值的流程;
然后还有一种粘性事件:
这个事件就好比我们用startActivity();一样
在MainActivity中传值,并且启动要接受的Activity
EventBus.getDefault().postSticky(new AnyEventType("传过去了")); startActivity(new Intent(MainActivity.this,JIeshou.class));
然后在接受的类里面去接受:
@Subscribe(threadMode = ThreadMode.MAIN, sticky = true) public void receiveEventBus(AnyEventType messageEvent) { name.setText(messageEvent.getmMsg()); }
我们会发现并没有值,这就是粘性事件的特点,我们是先传值的然后才注册的,理论上是没有值的,但粘性事件就解决了此事
我们只要再注册一下就可以了:
EventBus.getDefault().register(JIeshou.this);
然后就要记得把它销毁掉:
@Override protected void onDestroy() { super.onDestroy(); //解注册 EventBus.getDefault().removeAllStickyEvents(); EventBus.getDefault().unregister(JIeshou.this); }