Otto 事件处理顺序

Otto events handling order

如果我要使用 Otto Bus 库,请帮助我确定以下情况是否有效。

  1. 如果我需要保证订阅者执行的顺序。我有两个正在侦听相同事件类型的组件,是否有 Otto Bus 可以保证component1不断处理事件的能力 在组件 2 之前。我注册他们的订单可以提供给我吗 那个?
  2. 根据 Otto 文档

    Posting to the bus is a synchronous action so when program execution continues it is guaranteed that all subscribers have been called.

    这是否意味着任何事件订阅者都没有被执行 并行?

谢谢

发布事件时,Otto 遍历 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);
    }
  }
}