我们都知道当有了RxBus这种通信方式后,我们Activity A跳转到Activity B,然后B带值传到A中就很方便了,再也不需要之前的startActivityForResualt.
可是假如我们A带值到B去怎么做呢,RxBus是做不到的,传统的方式我们还在使用Intent 传过去,虽然这样做没有什么毛病,但是无疑当业务复杂后,key会特别的多.
那我就想能不能改进RxBus方式可以达到这种效果呢?
首先我们简单看一下网上一个RxBus实现源码,并不复杂
public class RxBus {
// 主题
private final FlowableProcessor bus;
// PublishSubject只会把在订阅发生的时间点之后来自原始Flowable的数据发射给观察者
private RxBus() {
bus = PublishProcessor.create().toSerialized();
}
public static RxBus getDefault() {
return RxBusHolder.sInstance;
}
private static class RxBusHolder {
private static final RxBus sInstance = new RxBus();
}
// 提供了一个新的事件
public void post(Object o) {
bus.onNext(o);
}
// 根据传递的 eventType 类型返回特定类型(eventType)的 被观察者
public Flowable toFlowable(Class eventType) {
return bus.ofType(eventType);
}
// 封装默认订阅
public Disposable toDefaultFlowable(Class eventType, Consumer act) {
return bus.ofType(eventType).compose(RxUtil.rxSchedulerHelper()).subscribe(act);
}
}
我之前用的RxBus实现方式是这样的当然还是1.x+版本
public class RxBus {
private static final String TAG = RxBus.class.getSimpleName();
private static Object async = new Object();
private static RxBus instance;
public static boolean DEBUG = false;
private ConcurrentHashMap> subjectMapper = new ConcurrentHashMap<>();
private RxBus() {}
public static RxBus get() {
synchronized (async){
if (null == instance)
instance = new RxBus();
return instance;
}
}
/**
* 注册事件
* @param tag
* @param clazz
* @param
* @return
*/
@SuppressWarnings("unchecked")
public Observable register(@NonNull Object tag, @NonNull Class clazz) {