rxbus 源码_关于RxBus实现方式的思考

我们都知道当有了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) {

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值