Rxjava2在Api方面有不少变化,基于Rxjava1.x的Rxbus实现不太适用,网上关于2.0的资料很少,既然没有现成的,那就自己写一个
1.API变化
1.x中是使用PublishSubject来现实管理消息的,并使用SerializedSubject保证现成安全,在2.0中,
Subject被Processer代替,通过PublishProcesser管理消息,并通过toSerialized()方法保证现成安全
public class RxBus {
//相当于Rxjava1.x中的Subject
private final FlowableProcessor
2.简单封装
public class RxBusHelper {
/**
* 发布消息
*
* @param o
*/
public static void post(Object o) {
RxBus.getDefault().post(o);
}
/**
* 接收消息,并在主线程处理
*
* @param aClass
* @param disposables 用于存放消息
* @param listener
* @param
*/
public static void doOnMainThread(Class aClass, CompositeDisposable disposables, OnEventListener listener) {
disposables.add(RxBus.getDefault().toFlowable(aClass).observeOn(AndroidSchedulers.mainThread()).subscribe(listener::onEvent, throwable -> listener.onError(new ErrorBean(ErrorCode.ERROR_CODE_RXBUS, ErrorCode.ERROR_DESC_RXBUS))));
}
public static void doOnMainThread(Class aClass, OnEventListener listener) {
RxBus.getDefault().toFlowable(aClass).observeOn(AndroidSchedulers.mainThread()).subscribe(listener::onEvent, throwable -> listener.onError(new ErrorBean(ErrorCode.ERROR_CODE_RXBUS, ErrorCode.ERROR_DESC_RXBUS)));
}
/**
* 接收消息,并在子线程处理
*
* @param aClass
* @param disposables
* @param listener
* @param
*/
public static void doOnChildThread(Class aClass, CompositeDisposable disposables, OnEventListener listener) {
disposables.add(RxBus.getDefault().toFlowable(aClass).subscribeOn(Schedulers.newThread()).subscribe(listener::onEvent, throwable -> listener.onError(new ErrorBean(ErrorCode.ERROR_CODE_RXBUS, ErrorCode.ERROR_DESC_RXBUS))));
}
public static void doOnChildThread(Class aClass, OnEventListener listener) {
RxBus.getDefault().toFlowable(aClass).subscribeOn(Schedulers.newThread()).subscribe(listener::onEvent, throwable -> listener.onError(new ErrorBean(ErrorCode.ERROR_CODE_RXBUS, ErrorCode.ERROR_DESC_RXBUS)));
}
public interface OnEventListener {
void onEvent(T t);
void onError(ErrorBean errorBean);
}
}
3.示例
https://github.com/lightofrain/RxBusTest.git