0

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

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

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

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

感谢您对此的任何见解!

史蒂芬

4

1 回答 1

2

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

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

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

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

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

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

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

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

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

正确的。

于 2014-08-26T19:07:43.633 回答