gpt4 book ai didi

java - RxJava 和 GreenRobot 事件总线

转载 作者:行者123 更新时间:2023-11-29 20:15:48 25 4
gpt4 key购买 nike

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

举例

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

我想像这样将此类事件作为我的 Observable 对象的一部分进行监听。

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
}
}

有什么见解吗?

谢谢。

最佳答案

从技术上讲,是的,observable 需要将自己注册到 EventBus,这就是它永远不会接收 ReceiverEvent 的原因。但是向事件总线注册一个匿名类充其量是困惑的。更大的问题在于您的架构。

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

因此,对于您的情况,我建议您选择一个 - RxJava 或 EventBus。无需同时使用两者。

目前 - 看起来您正在使用 Receiver 来监听 C++ 代码中的某些内容,然后使用 EventBus 将该消息传递给 RxJava Observable,然后由 RxJava Observable 将其传递给正在观察的对象。为什么不砍掉一个或多个中间商呢?使 Receiver 成为一个 Observable 类,或者完全删除 observable 并只监听 ReceivedEvent,您的应用程序的任何部分都真正需要它...

关于java - RxJava 和 GreenRobot 事件总线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33926390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com