写在前面
由于项目中有使用到Rx系列,这个时候如果还使用EventBus,这就导致了过多使用第三方库的问题,而改造后的RxBus完全能替代掉EventBus。
实现效果
- 用法与EventBus完全一致
- 功能也与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);
}
三、注意事项:
- 在响应的生命周期方法中注册和取消注册Rxbus
- 在接受事件添加对应的ThreadMode:MAIN、CURRENT_THREAD、NEW_THREADH、IO 和 code(可选,更加方便快速定位到对应的事件)
- receiveXxx()方法是上面post(sendX)的接受者,该方法使用@Subscribe注解,并指定在指定的线程,可标识为sticky,但需要注意的是退出程序是必须注销所有的sticky消息:RxBus.getDefault().removeAllStickyEvents()。
写在最后
没有最后。。。