事件总线(Otto或Greenrobot)是否依赖于onCreate *() - 回调?

时间:2014-08-26 18:15:47

标签: android events bus otto

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

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

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

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

感谢您对此有任何见解!

斯特芬

1 个答案:

答案 0 :(得分:2)

  

为了使所有活动/片段/服务能够使用事件总线,他们必须在总线上注册(优选使用onCreate *() - 方法)

onCreate()可能是也可能不是适当的地方,特别是对于活动和碎片。

  

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

这就是为什么onCreate()可能是也可能不是注册的正确位置的原因。注册和取消注册应该在配对的生命周期方法中进行。

  

让我们说我想要实现一个全新的动作栏(不是android或者sherlock或其他任何一个,我的意思是从头开始)

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

  

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

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

  

每个片段首先需要向事件总线注册,所以为了使其工作,每个片段onCreate() - 方法必须至少调用一次,是吗?

正确。