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

#android #otto

#Android #отто #otto

Вопрос:

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

  1. Если мне нужно обеспечить порядок выполнения подписчика. У меня есть два компонента, которые прослушивают один и тот же тип события, есть ли возможность шины Otto, которая может гарантировать, что постоянно component1 обрабатывает событие перед component2. Может ли порядок, в котором я их регистрирую, обеспечить мне это?
  2. Согласно документации Otto

    Отправка сообщений на шину является синхронным действием, поэтому, когда выполнение программы продолжается, гарантируется, что все абоненты были вызваны.

    Означает ли это, что ни один из подписчиков события не выполняется параллельно?

Спасибо

Ответ №1:

При публикации события Otto выполняет итерацию через Set ряд обработчиков, чтобы отправить им событие.

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

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

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

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

  if (wrappers != null amp;amp; !wrappers.isEmpty()) {
    dispatched = true;
    for (EventHandler wrapper : wrappers) {
      enqueueEvent(event, wrapper);
    }
  }
}