有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java RxJava和GreenRobot事件总线

我正在编写一个应用程序,它接收来自JNI对Java类中静态方法的调用

以身作则

public class Receiver {
   // method called from C++ in some thread
   private static void receive(int value) {
       EventBus.instance().post(new ReceiverEvent(value));
   }
}

我想听听这类事件,作为我观察到的物体的一部分

Observer.create(new Observable.Subscriber<String>() {
    @Override
    public void call(Subscriber<? super String> subscriber) {
        // blocked until onEvent was fired
        return subscriber.onNext("ok");
    }

    public void onEvent(ReceiverEvent receiverEvent) {
        // fire call observable function 
    }
}

有什么见解吗

谢谢


共 (1) 个答案

  1. # 1 楼答案

    从技术上讲,是的,可观察对象需要向EventBus注册自身,这就是为什么它从未接收到ReceiverEvent。但在事件总线上注册一个匿名类充其量也很麻烦。更大的问题在于你的架构

    RxJava、EventBus和Observable都是解决同一问题的工具。它们都或多或少地实现了相同的技巧——可观察模式。不同之处在于,EventBus和RxJava提供了更多的功能——主要围绕着代码的优美性——它们使代码更具可读性,因此实现起来更快

    因此,在您的情况下,我建议选择一种——RxJava或EventBus。没有必要两者都使用

    目前看来,你正在使用接收器来侦听C++代码中的某些东西,然后使用EnviBUS将该消息传递给RXJava可观察的,然后将其传递给任何正在观察的对象。为什么不删掉一个或多个中间人呢?让接收者成为一个可观察的类,或者完全删除可观察的类,只需聆听应用程序中任何部分真正需要它的接收者就可以了