Подпишитесь на разные события автобус в том же классе

Я использую 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 объект?

1 ответ

Решение

Оба абонента звонят из-за наследования класса событий. Но вы можете отключить это eventInheritance особенность в самом EventBus. Используя этот метод:

EventBus BUS = EventBus.builder().eventInheritance(false).installDefaultEventBus();
Другие вопросы по тегам