RxJava和GreenRobot事件总线
我正在编写一个应用程序,它接收来自JNI对Java类中静态方法的调用 以身作则RxJava和GreenRobot事件总线,java,android,rx-java,event-bus,greenrobot-eventbus,Java,Android,Rx Java,Event Bus,Greenrobot Eventbus,我正在编写一个应用程序,它接收来自JNI对Java类中静态方法的调用 以身作则 public class Receiver { // method called from C++ in some thread private static void receive(int value) { EventBus.instance().post(new ReceiverEvent(value)); } } 我想听听这类事件,作为我观察到的物体的一部分,像这样 Obse
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
}
}
Observer.create(新的Observable.Subscriber(){
@凌驾
公共无效呼叫(订户参见本教程:
EventBus是一个单例,这意味着在整个应用程序中只存在一个EventBus对象。此对象必须由getDefault()引用。
在你的可观察类中,总线必须由
可观察类
private EventBus bus = EventBus.getDefault();
这个班级必须注册到公共汽车上
bus.register(this);
接收器类别
private EventBus bus = EventBus.getDefault();
EventBusReceiver继承自BroadcastReceiver
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);
}
您可以使用PublishSubject
。它是可观察的,同时也是观察者。
您可以同时推送和订阅事件
PublishSubject<ReceiverEvent> channel = PublishSubject.create();
channel.subscribe(yourObserver);
您可以使用在Rx中实现的EventBus代替GreenRobot:
这里的例子来自Rx-的作者,从技术上讲,是的,observable需要向EventBus注册自己,这就是为什么它从来没有接收到ReceiverEvent。但向event bus注册匿名类充其量是一件麻烦的事。更大的问题在于您的体系结构
RxJava、EventBus和Observable都是解决同一问题的工具。它们都或多或少地实现了相同的技巧——Observable模式。区别在于EventBus和RxJava提供了更多的功能——主要围绕代码的优美性——它们使代码更具可读性,因此实现起来更快
因此,在您的情况下,我建议选择一种——RxJava或EventBus,不需要同时使用这两种
目前看来,你正在使用接收器来侦听C++代码中的某些东西,然后使用EnviBUS将该消息传递给RXJava可观察的人,然后将其传递给任何正在观察的事物。为什么不删去一个或多个中间人?使接收者成为可观察的类,或者移除可观察的全部和JU。st倾听应用程序中哪一部分真正需要它的ReceivedEvent…
是的,保持这两种方法都不适合这样做。我绝对同意有一个可观察的类来处理这种行为。