Android EventBus的使用

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

 

转载于:https://www.cnblogs.com/cainiaodongdong/p/7798776.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值