大飞

大飞 关注TA

挑战一切!

大飞

大飞

关注TA

挑战一切!

  •  世界的顶端
  • 混口饭吃
  • 写了333,609字

该文章投稿至Nemo社区   Android  板块 复制链接


RxBus 源码分析以及使用

发布于 2017/05/26 23:31 1,623浏览 0回复 1,809

       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,"发送消息可在任何地方");
本文标签
 {{tag}}
点了个评