RxJava实现的EventBus-RxBus

作者: 塞上牧羊空许约 | 来源:发表于2018-05-12 08:48 被阅读0次

    使用RxJava2实现RxBus

    当我们使用RxJava2实现EventBus模式时,我们称其为RxBus.
    注意:这仅作为一个例子。

    那么,就让我们来看看如何使用RxJava2实现RxBus吧

    首先,你得了解RxJava中有关subject的知识,为此你可以参考一下我之前有关RxJava Subject的文章
    了解RxJava Subject之后,我们便可以创建RxBus啦。

    public class RxBus {
    
        public RxBus() {
        }
    
        private PublishSubject<Object> bus = PublishSubject.create();
    
        public void send(Object o) {
            bus.onNext(o);
        }
    
        public Observable<Object> toObservable() {
            return bus;
        }
    
    }
    

    现在,我们将在我们的Application类里或其他地方创建RxBus单例,如下:

    public class MyApplication extends Application {
    
        private RxBus bus;
    
        @Override
        public void onCreate() {
            super.onCreate();
            bus = new RxBus();
        }
    
        public RxBus bus() {
            return bus;
        }
    
    }
    

    于是,我们可以在任何地方访问到RxBus。
    我们可以在任何一个class中订阅一个事件,如下所示:

    ((MyApplication) getApplication())
            .bus()
            .toObservable()
            .subscribe(new Consumer<Object>() {
                @Override
                public void accept(Object object) throws Exception {
                    if (object instanceof EventTypeOne) {
                        Logger.d("Event Type One Received");
                    } else if (object instanceof EventTypeTwo) {
                        Logger.d("Event Type Two Received");
                    }
                }
            });
    

    我们可在其他任何类中或同一个类中发送一个事件。

    ((MyApplication) getApplication())
            .bus()
            .send(new EventTypeOne());
    

    到此,我们已经使用RxJava实现啦一个EventBus,RxBus。
    但是如果发生啦一些error,它将会停止。为避免这种情况可以参考下RxRelay
    RxRelay:也是一个Subject,但不会调用onComplete 或 onError.
    检出项目完整代码


    翻译自:Implementing EventBus With RxJava — RxBus

    相关文章

      网友评论

        本文标题:RxJava实现的EventBus-RxBus

        本文链接:https://www.haomeiwen.com/subject/unrcdftx.html