3

をイベント バスとして使用してGreenRobot Event Bus 3.0おり、2 つのパブリッシャーがあります。

 private static final EventBus EVENT_BUS = new EventBus();

//Publish event to the event bus
public static void sendEvent(LoggingEvent event){
    LogPublisher.EVENT_BUS.post(event);
}

//Publish event to the event bus
public static void sendEvent(OtherLoggingEvent event){
    LogPublisher.EVENT_BUS.post(event);
}

私は2人のサブスクライバーを持っています:

 @Subscribe(threadMode = ThreadMode.ASYNC)
    public void onEvent(LoggingEvent event){
        logEvent( event);
    }

 @Subscribe(threadMode = ThreadMode.ASYNC)
    public void onEvent(OtherLoggingEvent event){
        logEvent( event);
    }

問題は、次のような電話をかけるときです。

MyPublisher.sendEvent(new OtherLoggingEvent(varA, varB, varC));

両方の加入者が呼び出されましたが、その理由がわかりません。OtherLoggingEventが のサブクラスであるという事実と関係があるのではないかと思いますがLoggingEvent、よくわかりません。私の質問は、パブリッシャーとサブスクライバーとの 1 対 1 の関係を維持するにはどうすればよいかということです。電話したい:

MyPublisher.sendEvent(new OtherLoggingEvent(varA, varB, varC));

サブスクライバーpublic void onEvent(OtherLoggingEvent event)に電話をかけてもらい、私が電話すると:

MyPublisher.sendEvent(new LoggingEvent(varD, varE, varF));

サブスクライバー:

 public void onEvent(LoggingEvent event)

呼ばれますか?これはそのまま機能しますが、クラスが一意であり、相互のサブクラスではないことを確認する必要がありますか? 新しいEventBusオブジェクトを作成する必要がありますか?

4

1 に答える 1