Android:EventBus向上向下传参

标题Android:EventBus向上向下传参

1、添加引用

implementation 'org.greenrobot:eventbus:3.1.1'

2、注册+解除

    //onCreate注册
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        EventBus.getDefault().register(this);
    }
   //onDestroy解除
    @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }

3、订阅事件:

    //onEvent名称可以随意定义
    @Subscribe(threadMode = ThreadMode.POSTING)
    public void onEvent(EventBusMessage message){
        text.setText(message.toString());
    }

4、发送事件:

EventBus.getDefault().post(new EventBusMessage("this is a message.","200"));
  • 相关说明:

EventBusMessage为消息实体,java类,可根据实际需求定义。

@Subscribe 添加注解。
包含四种线程类型:

  1. POSTING (默认) 表示事件处理函数的线程跟发布事件的线程在同一个线程。
  2. MAIN 表示事件处理函数的线程在主线程(UI)线程,因此在这里不能进行耗时操作。
  3. BACKGROUND 表示事件处理函数的线程在后台线程,因此不能进行UI操作。如果发布事件的线程是主线程(UI线程),那么事件处理函数将会开启一个后台线程,如果果发布事件的线程是在后台线程,那么事件处理函数就使用该线程。
  4. ASYNC 表示无论事件发布的线程是哪一个,事件处理函数始终会新建一个子线程运行,同样不能进行UI操作。

以上为向上传参,可代替onActivityResult使用。
在第一个Activity中,注册,订阅事件,在第二个activity中可直接发送事件,第一个activity作为观察者就会接收的发送的事件,进行后续操作。

接下来是向下传参(第一个activity向下一个activity传参)
1、发送事件

     EventBus.getDefault().postSticky(new EventBusMessage("message","200"));

2、注册并接收事件

       @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_second);
            EventBus.getDefault().register(this);
        }
       //接收事件
        @Subscribe(threadMode = ThreadMode.POSTING , sticky = true)
        public void onEvent(EventBusParams p){
            // do sth
        }
        //解除绑定并清除所有黏性事件
        @Override
        protected void onDestroy() {
            EventBus.getDefault().removeAllStickyEvents();
            EventBus.getDefault().unregister(this);
            super.onDestroy();
        }

相关说明:
黏性事件

何为黏性事件呢?简单讲,就是在发送事件之后再订阅该事件也能收到该事件。Android中就有这样的实例,也就是Sticky Broadcast,即粘性广播。正常情况下如果发送者发送了某个广播,而接收者在这个广播发送后才注册自己的Receiver,这时接收者便无法接收到刚才的广播,为此Android引入了StickyBroadcast,在广播发送结束后会保存刚刚发送的广播(Intent),这样当接收者注册完 Receiver后就可以接收到刚才已经发布的广播。这就使得我们可以预先处理一些事件,让有消费者时再把这些事件投递给消费者.
EventBus也提供了这样的功能,有所不同是EventBus会存储所有的Sticky事件,如果某个事件在不需要再存储则需要手动进行移除。用户通过Sticky的形式发布事件,而消费者也需要通过Sticky的形式进行注册,当然这种注册除了可以接收Sticky事件之外和常规的注册功能是一样的,其他类型的事件也会被正常处理。

你可能感兴趣的:(Android:EventBus向上向下传参)