您的位置:首页 > 其它

RXBus初使用

2018-03-20 17:35 85 查看
public class RxBus {

private static volatile RxBus defaultInstance;

private final Subject<Object, Object> bus;
// PublishSubject只会把在订阅发生的时间点之后来自原始Observable的数据发射给观察者
public RxBus() {
bus = new SerializedSubject<>(PublishSubject.create());
}
// 单例RxBus
public static RxBus getDefault() {
if (defaultInstance == null) {
synchronized (RxBus.class) {
if (defaultInstance == null) {
defaultInstance = new RxBus();
}
}
}
return defaultInstance ;
}
// 发送一个新的事件
public void post (Object o) {
bus.onNext(o);
}
// 根据传递的 eventType 类型返回特定类型(eventType)的 被观察者
public <T> Observable<T> toObservable (Class<T> eventType) {
return bus.ofType(eventType);
//        这里感谢小鄧子的提醒: ofType = filter + cast
//        return bus.filter(new Func1<Object, Boolean>() {
//            @Override
//            public Boolean call(Object o) {
//                return eventType.isInstance(o);
//            }
//        }) .cast(eventType);
}
}
使用RxBus post数据RxBus.getDefault().post(new UserEvent(1, Constants.RENOVATE));//post方法里面的参数是自己自定义的even
接收RxBus post出来的数据,post出来的数据哪里都可以接收,但是接收的时候首先的保证Subscription已经注册,
如果没有注册,则接收不到注册之前post出来的数据。
使用RxBus接收post出来的数据
printSubscribe = RxBus.getDefault().toObservable(StateEvent.class).subscribe(new Action1<StateEvent>() {@Overridepublic void call(StateEvent printEvent) {if (printEvent.getId() == 1) {receiptConnected = printEvent.isConnected();if (receiptConnected) {imgReceiptState.setImageResource(R.drawable.print_receipt_state_open);} else {imgReceiptState.setImageResource(R.drawable.print_receipt_state_close);}}}});
根据自定义的event里面的字段,得到RxBus post出来的数据,在进行ui的更新操作

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  RxBus