📜  如何使用 RxJava 实现 EventBus – RxBus?

📅  最后修改于: 2022-05-13 01:55:04.386000             🧑  作者: Mango

如何使用 RxJava 实现 EventBus – RxBus?

在 RxJava 之前,我们使用 Otto、EventBus、startActivityForResult Intent 等总线库来代表当前作业更新其他片段。假设我们开始第一个活动,然后是另一个,然后是另一个,依此类推,直到第四个活动在前台,其他三个在后台。如果我们对前台 Activity 进行任何形式的更改,然后返回到后台 Activity 并再次加载数据以使用新数据刷新 UI,则不再需要这样做;我们不再需要向服务器发出任何进一步的请求。只需创建一个 RxBus 事件并在您希望收听的任何地方收听并更新 UI。

当我们使用 RxJava 来实现 EventBus 范式时,我们将其称为 RxBus。

图 1. 理解 RxJava –RxBus

事不宜迟,让我们从创建 RxBus 开始。

分步实施

第 1 步:创建 RxBus



第一步是创建一个 RXBus,通过它我们将驱动所有 UI 更改,我们称之为 GfgRxGfgSampleBus(),通过它,我们可以访问并进行相应的更改。

Java
public class GfgRxGfgSampleBus {
    public GfgRxGfgSampleBus() {
    }
    private CoursePublications gfgSampleBus = CoursePublications.create();
    public void send(Object o) {
        gfgSampleBus.onNext(o);
    }
    public Observable toObservable() {
        return gfgSampleBus;
    }
}

Java
public class GfgSampleApp extends Application {
    private RxSampleBus sampleBus;
    // Declaring an object
    @Override
    public void onCreate() {
        super.onCreate();
        sampleBus = new RxSampleBus();
    }
  
    public RxSampleBus sampleBus() {
        return sampleBus;
    }
}


Java
((SampleGfGApp) getApplication())
        .sampleBus()
        .toObservable()
        .subscribe(new Consumer() {
            @Override
            public void accept(Object gfgObject) throws Exception {
                if (gfgObject instanceof EventTypeOne) {
                    Logger.d("GfG Articles are the best One");
                } else if (gfgObject instanceof EventTypeTwo) {
                    Logger.d("GfG Articles are the best Two");
            }
      }
});

现在,我们将在我们的应用程序类或其他任何地方构造一个 RxBus 单例(单个实例):

第 2 步:在应用程序中创建单例

下一步是创建一个 Singelton 应用程序,通过这个用Java编写的应用程序,我们可以访问我们在上一步中创建的 Rx 总线。

Java

public class GfgSampleApp extends Application {
    private RxSampleBus sampleBus;
    // Declaring an object
    @Override
    public void onCreate() {
        super.onCreate();
        sampleBus = new RxSampleBus();
    }
  
    public RxSampleBus sampleBus() {
        return sampleBus;
    }
}

因此,我们现在可以从任何地方访问 RxBus。我们可以报名参加任何班级的活动。这使我们能够:

第 3 步:访问注册事件

现在我们将访问我们在上一步中创建的注册事件,然后使用 Rx 总线驱动我们需要的 UI 更改,使用消费者对象,我们将其设为单一类型事件,只需按照以下步骤操作:

Java

((SampleGfGApp) getApplication())
        .sampleBus()
        .toObservable()
        .subscribe(new Consumer() {
            @Override
            public void accept(Object gfgObject) throws Exception {
                if (gfgObject instanceof EventTypeOne) {
                    Logger.d("GfG Articles are the best One");
                } else if (gfgObject instanceof EventTypeTwo) {
                    Logger.d("GfG Articles are the best Two");
            }
      }
});

结论

最后,我们有了带有 RxJava 和 RxBus 的 EventBus 模式。但是,如果出现问题,它将终止,因此检查 RxRelay 以避免这种情况。