2015-11-25 49 views
1

我正在写一个应用程序,它接收来自JNI的Java类中静态方法的调用。RxJava和GreenRobot EventBus

例如

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

从技术上讲,是可观察的需要进行注册本身与EventBus,这就是为什么它从来没有收到ReceiverEvent。但在事件公共汽车上注册一个匿名类最好是凌乱。更大的问题是你的架构。

RxJava,EventBus和Observable's都是解决同样问题的工具。他们都实现了或多或少相同的伎俩 - 可观察的模式。不同之处在于EventBus和RxJava提供了更多的功能 - 主要围绕代码的优雅性 - 它们使代码更具可读性,因此实现起来更快。

所以在你的情况下,我会建议选择一个 - RxJava或EventBus。没有必要使用两者。

此刻 - 看起来您正在使用Receiver在C++代码中侦听某些内容,然后使用EventBus将该消息传递给RxJava Observable,然后RxJava Observable将它传递给任何正在观察的对象。为什么不剪掉一个或多个中间商?让Receiver成为Observable类,或者完全删除observable,只听ListenEvent,其中有部分应用程序确实需要它......

+0

是的,保持这两种方法不是恰当的方式来做到这一点。我完全同意拥有一个处理这种行为的可观察类。 –

0

看到这个教程:http://code.tutsplus.com/tutorials/quick-tip-how-to-use-the-eventbus-library--cms-22694

EventBus是,这意味着在整个应用程序仅单个EventBus对象存在。这个对象已经由getDefault()

在你观察到的类中所指向的总线由

可观察类

private EventBus bus = EventBus.getDefault(); 

被refered并类有注册到总线

 bus.register(this); 

接收机类

的EventBusReceiver从广播接收器

继承
public class ChargingReceiver extends BroadcastReceiver { 

则由于EventBus是它也可以通过

private EventBus bus = EventBus.getDefault(); 

@Override 
public void onReceive(Context context, Intent intent) { 
    Event event = null; 


    // Post the event 
    bus.post(event); 
    } 
0

引用您可以使用PublishSubject单身。它可以同时观察和观察。 您可以推送事件并同时订阅。

PublishSubject<ReceiverEvent> channel = PublishSubject.create(); 
channel.subscribe(yourObserver); 

在绿色机器人接收

public void onEvent(ReceiverEvent receiverEvent) { 
    channel.onNext(receiverEvent); 
} 

您可以使用的Rx代替GreenRobot实现EventBus:
这里例如从Rx的作者 - gist

相关问题