Порядок обработки событий Otto

Пожалуйста, помогите мне выяснить, допустимы ли следующие сценарии, если я собираюсь использовать Otto Bus lib.

  1. Если мне нужно обеспечить порядок выполнения подписчика. У меня есть два компонента, которые прослушивают один и тот же тип события, есть ли возможность Otto Bus, которая может гарантировать, что постоянно компонент 1 обрабатывает событие до компонента 2. Может ли порядок, в котором я их регистрирую, предоставить мне это?
  2. #P2# <блочная цитата> #P3# #P4#

Спасибо


person Denis Voloshin    schedule 20.10.2016    source источник


Ответы (1)


При публикации события Отто перебирает Set обработчиков, чтобы отправить им событие.

Поскольку Set является неупорядоченной коллекцией, не гарантируется, что это произойдет в том порядке, в котором вы их зарегистрировали (или в любом конкретном порядке).

Соответствующая часть исходного кода:

Set<Class<?>> dispatchTypes = flattenHierarchy(event.getClass());

boolean dispatched = false;
for (Class<?> eventType : dispatchTypes) {
  Set<EventHandler> wrappers = getHandlersForEventType(eventType);

  if (wrappers != null && !wrappers.isEmpty()) {
    dispatched = true;
    for (EventHandler wrapper : wrappers) {
      enqueueEvent(event, wrapper);
    }
  }
}
person earthw0rmjim    schedule 20.10.2016