Android EventBus的使用

旧城冷巷雨未停 提交于 2019-12-27 03:42:36

这个其实和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);
    }

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!