2015-11-25 79 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

相關問題