package com.codeest.geeknews.component; import com.codeest.geeknews.util.RxUtil; import io.reactivex.Flowable; import io.reactivex.disposables.Disposable; import io.reactivex.functions.Consumer; import io.reactivex.processors.FlowableProcessor; import io.reactivex.processors.PublishProcessor; /** * Created by codeest on 2016/8/2. */ public class RxBus { // 主题 private final FlowableProcessor<Object> 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 <T> Flowable<T> toFlowable(Class<T> eventType) { return bus.ofType(eventType); } // 封装默认订阅 public <T> Disposable toDefaultFlowable(Class<T> eventType, Consumer<T> act) { return bus.ofType(eventType).compose(RxUtil.<T>rxSchedulerHelper()).subscribe(act); } }