【问题标题】:Is an Event Bus (Otto or Greenrobot) dependant on the onCreate*()-callbacks?事件总线(Otto 或 Greenrobot)是否依赖于 onCreate*() 回调?
【发布时间】:2014-08-26 18:15:46
【问题描述】:

我有一个关于结合 android 活动/片段/服务的事件总线设计模式的具体问题。

到目前为止我的理解: 当使用事件总线时,我可以说,为我的整个应用程序创建一个事件总线(单例设计模式)。 现在我可以让单个活动/片段/服务在事件总线上发布一个事件,事件总线将消息传播到订阅此特定事件的所有其他活动/片段/服务。这样,所有其他活动/片段/服务都可以对此特定事件做出反应。 为了让所有活动/片段/服务能够使用事件总线,他们必须在总线上注册(最好在他们的 onCreate*() 方法中),如果他们即将停止/取消/销毁,他们应该取消注册.

这让我想到了我的问题: 假设我想实现一个全新的操作栏(不是 android 或 sherlock 或任何其他,我的意思是从头开始)。 据我了解,我可以实现一个带有事件总线的操作栏。因此,我的主要活动将在活动布局顶部带有按钮,并且每个按钮都实现了自己的 onClick 方法。对于每个按钮,一旦单击关联的按钮,我就会有一个可见的片段。 现在在每个 onClick 方法(每个按钮一个)中,我可以将一个事件发布到事件总线,然后总线将其传播到片段。然后片段根据附加的事件信息检查它们是否应该可见。

现在的问题是,每个片段都需要先注册到事件总线,所以为了让这个工作每个片段的 onCreate() 方法必须至少调用一次,对吗?

感谢您对此的任何见解!

史蒂芬

【问题讨论】:

    标签: android events bus otto


    【解决方案1】:

    为了让所有活动/片段/服务能够使用事件总线,它们必须向总线注册(最好在它们的 onCreate*() 方法中)

    onCreate() 可能是也可能不是合适的位置,尤其是对于活动和片段。

    如果他们即将被停止/取消/销毁,他们应该取消注册。

    这就是为什么onCreate() 可能是也可能不是合适的注册地点。注册和注销应该在成对的生命周期方法中发生。

    假设我想实现一个全新的操作栏(不是 android 或 sherlock 或任何其他,我的意思是从头开始)

    请注意,您的描述中没有任何内容需要这样做,因为这一切都可以通过标准操作栏或其反向端口来完成。

    现在在每个 onClick 方法(每个按钮一个)中,我可以将事件发布到事件总线,然后总线将其传播到片段。然后片段根据附加的事件信息检查它们是否应该可见。

    或者,活动可以告诉片段“哟,你的按钮被点击了”。事件总线非常适合从发送者到接收者没有直接连接的情况(例如,服务到活动),或者事件可能对多方感兴趣。在这种情况下,似乎没有必要使用事件总线,因为活动已经知道它的片段。

    每个片段都需要先注册到事件总线,所以为了让这个工作每个片段的 onCreate() 方法必须至少调用一次,对吗?

    正确。

    【讨论】:

    • 亲爱的,谢谢你的回答!澄清一下:我不想实现新的操作栏。我只是把它作为一个例子来更好地理解事件总线设计模式。此外,我试图了解何时使用事件总线以及何时使用 android 板载材料。 android API 中包含的设计模式意义上的板载材料。
    • @SteffenKern:“我不想实现一个新的操作栏”——小天使和塞拉芬唱着“哈利路亚!” :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 2023-03-24
    相关资源
    最近更新 更多