【问题标题】:Otto events handling orderOtto 事件处理顺序
【发布时间】:2016-10-21 21:31:54
【问题描述】:

如果我要使用 Otto Bus lib,请帮助我确定以下场景是否有效。

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

    发布到总线是一个同步动作,所以当程序执行时 继续,保证所有订阅者都已被调用。

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

谢谢

【问题讨论】:

    标签: android 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 && !wrappers.isEmpty()) {
        dispatched = true;
        for (EventHandler wrapper : wrappers) {
          enqueueEvent(event, wrapper);
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-27
      相关资源
      最近更新 更多