【问题标题】:Otto bus event , single subscribe should be called onlyOtto 总线事件,单次订阅应该只被调用
【发布时间】:2014-07-24 19:36:53
【问题描述】:

我在这里解释过使用 otto 事件总线。它工作得很好。

http://square.github.io/otto/

https://code.google.com/p/guava-libraries/wiki/EventBusExplained

今天我意识到,如果我创建事件并在 2 个地方订阅它,两者都会被调用。

要更清楚地说明这一点:

我有使用事件总线进行内部通信的 jar。 当我在我的应用程序中使用这个 jar 时,我可以在事件总线上注册并捕获事件。

如何避免这种情况?

【问题讨论】:

    标签: android otto


    【解决方案1】:

    看起来它正在按预期工作。您可能想要创建两个不同的事件来解决您的问题。

    【讨论】:

      【解决方案2】:

      如果您注册了多个目的地,并且它们都订阅了事件总线上的特定事件,那么所有这些目的地都会在该事件发布时得到通知。这是 Otto 巴士的预期工作方式。它遵循发布/订阅pattern

      请务必注意,并不是因为您已注册到事件总线,您才会将所有事件发布到该总线。您还需要订阅该事件。

      对你的用例来说,你真的需要注册到那个特定的总线吗?似乎您不想被通知该库中正在使用的特定事件。为什么不创建第二个 Bus 实例?然后,您可以使用它仅在您的应用程序内进行通信,而不会与您的库通信冲突。这将允许您订阅库使用的相同事件,但只有您的应用程序会注册到该应用程序。这将产生我认为您正在寻找的分离。因此,总而言之,您将拥有用于库通信的原始总线和用于您的应用程序通信的第二条总线。

      也许我错过了你在这里尝试做的事情。

      【讨论】:

      • 事件总线的行为: 当您在事件总线上注册并在多个位置订阅同一事件时,所有关联的 @subscribe 都会被调用。 就我而言我只想检查是否有任何方法可以只调用一个订阅事件,即使该事件是在多个位置订阅的。我想这是不可能的。
      • @user2713030 我已经更新了这个问题。对此有任何想法
      • Lavign : 你对此有何看法——
      • @morya 我已经更新了我的答案,我仍然不确定你想要实现什么,你告诉我这是否有意义。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-05
      • 2012-12-13
      • 1970-01-01
      • 2018-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多