Rxbus 关键源码
/** 提供了一个新的事件,根据code进行分发
* @param code 事件code * @param o */ public void post(int code, Object o){ _bus.onNext(new RxBusBaseMessage(code,o)); }
/**
* 根据传递的code和 eventType 类型返回特定类型(eventType)的 被观察者
* 对于注册了code为0,class为voidMessage的观察者,那么就接收不到code为0之外的voidMessage。
* @param code 事件code
* @param eventType 事件类型
* @param <T>
* @return
*/
public <T> Observable<T> toObservable(final int code, final Class<T> eventType) {
return _bus.ofType(RxBusBaseMessage.class)
.filter(new Func1<RxBusBaseMessage,Boolean>() {
@Override
public Boolean call(RxBusBaseMessage o) {
//过滤code和eventType都相同的事件
return o.getCode() == code && eventType.isInstance(o.getObject());
}
}).map(new Func1<RxBusBaseMessage,Object>() {
@Override
public Object call(RxBusBaseMessage o) {
return o.getObject();
}
}).cast(eventType);
}
使用
初始化被观察者 接受消息并处理
/**
* 在任何界面出发操作 这里响应
*/
@Override
public void initRxBus() {
Subscription subscribe = RxBus.getDefault().toObservable(RxCodeConstants.SHOW_TOAST, String.class)
.subscribe(new Action1<String>() {
@Override
public void call(String s) {
showToast("首页收到消息---:"+s);
}
});
addSubscription(subscribe);
}
在任何地方发送消息
RxBus.getDefault().post(RxCodeConstants.SHOW_TOAST,"发送消息可在任何地方");