RxBus
背景
是否有这样的纠结:
在已经习惯了EventBus的用法后,转战RxBus使用方法的不一致,导致多余的学习和使用成本
已经使用rxjava和rxAndroid到你的项目中,但是项目中又同时存在eventbus;因为rx完全可以替换掉eventbus所以导致了过多引入第三方jar包的问题,对于有代码洁癖和瘦身需求的同学们来说简直是一个噩耗;
如何在最大基础上修改我们已经存在的代码呢,那就是改造一个自己的rxbus,让他使用起来和eventbus一模一样,这样我们只需要将eventbus改名成rxbus即可,其他代码都不需要修改!
废话到此为止,开始我们的优化之路
项目成果
结果
工程目录
代码使用
- 注册-注销-接受事件
/*接受事件*/
@Subscribe(threadMode= ThreadMode.MAIN)
public void event(EventChangeText changeText){
tvChange.setText(changeText.getChangeText());
}
@Override
protected void onStart() {
super.onStart();
/*註冊*/
RxBus.getDefault().register(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
/*註銷*/
RxBus.getDefault().unRegister(this);
}
- 发送消息
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn_change_text:
RxBus.getDefault().post(new EventChangeText("我修改了-Main"));
break;
}
}
用过EventBus的同学一眼就应该能看出,用法完全一模一样
封装原理
封装注解
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Subscribe {
int code() default -1;
ThreadMode threadMode() default ThreadMode.CURRENT_THREAD;
}
暂时咱们先了解ThreadMode 参数,code参数的使用在结尾再给大家解释(比eventbus添加的一个功能)
ThreadMode 指定接受消息的处理所在的线程,我们这里定义了四种情况