如果你的项目中用到了Rxjava,那么你就完全可以自己去写一个RxBus来替换EventBus,让项目的体积变小。
在网上看了很多人写的RxBus,总感觉有些缺陷或者不能完全替换EventBus的功能。所以,综合别人写的RxBus我自己实现了一个比较完整的RxBus。
首先说说EventBus的功能:
1,注册、反注册、发送数据
2,接收数据(根据类型接收)
3,不同线程接收数据(非ui→非ui、非ui→ui、ui→非ui)
4,观察者只关心发送数据,不关心有多少订阅者
那么我们使用Rxjava也需要来完成这几个功能才算真正的替换。
我们先定义一个RxBus类,并写成单例。
/**
* rxbus的核心类
*/
public class RxBus {
public static RxBus getDefault() {
return RxBusInstance.rxBus;
}
//内部类
private static class RxBusInstance {
private static final RxBus rxBus = new RxBus();
}
// 主题,Subject是非线程安全的
public final Subject bus;
/**
* 单例
* PublishSubject只会把在订阅发生的时间点之后来自原始Observable的数据发射给观察者
* 序列化主题
* 将 Subject转换为一个 SerializedSubject ,类中把线程非安全的PublishSubject包装成线程安全的Subject
*/
private