RxBus的使用

写在前面

由于项目中有使用到Rx系列,这个时候如果还使用EventBus,这就导致了过多使用第三方库的问题,而改造后的RxBus完全能替代掉EventBus。

实现效果

  1. 用法与EventBus完全一致
  1. 功能也与EventBus一样

代码使用

一、post:前面说了用法与EventBus一致

@OnClick(R.id.text)
public void onClick(View view) {
    RxBus.getDefault().post(Send1);
    RxBus.getDefault().post(0x1, Send2);
}

首先这是一个点击事件,发送了一条Send1 消息和标识了code=0x1内容为Send2 的消息。

二、receive:

@Override
protected void onStart() {
    super.onStart();
    RxBus.getDefault().register(this);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    RxBus.getDefault().unRegister(this);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void receive(Send1 send1 ) {
    Log.i("tag", send1 .toString());
}

@Subscribe(code = 0x1, threadMode = ThreadMode.MAIN)
public void receiveCode(Send2 send2 ) {
    Log.i("tag", send2 .toString());
}

@Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
public void receiveSticky(final Send2 send2 ) {
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            Log.i("tag",send2 .toString() );
        }
    }, 2000);
}

三、注意事项:

  1. 在响应的生命周期方法中注册和取消注册Rxbus
  1. 在接受事件添加对应的ThreadMode:MAIN、CURRENT_THREAD、NEW_THREADH、IO 和 code(可选,更加方便快速定位到对应的事件)
  2. receiveXxx()方法是上面post(sendX)的接受者,该方法使用@Subscribe注解,并指定在指定的线程,可标识为sticky,但需要注意的是退出程序是必须注销所有的sticky消息:RxBus.getDefault().removeAllStickyEvents()。

写在最后

没有最后。。。

源码地址:https://github.com/wzgiceman/Rxbus

你可能感兴趣的:(RxBus的使用)