#android #otto
#Android #отто #otto
Вопрос:
Пожалуйста, помогите мне выяснить, допустимы ли следующие сценарии, если я собираюсь использовать Otto Bus lib.
- Если мне нужно обеспечить порядок выполнения подписчика. У меня есть два компонента, которые прослушивают один и тот же тип события, есть ли возможность шины Otto, которая может гарантировать, что постоянно component1 обрабатывает событие перед component2. Может ли порядок, в котором я их регистрирую, обеспечить мне это?
-
Согласно документации 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);
}
}
}