我尝试使用事件总线库,我无法理解它的功能并看到多个示例。它只使用服务类或使用活动和片段然后使用活动在活动或片段中使用事件总线的情况。
答案 0 :(得分:2)
我们可以简单地使用EventBus而不是接口。我们可以将消息从一个类传递到一个或多个类。 EventBus分3步
定义事件:
public static class MessageEvent { /* your getter and setter */ }
准备订阅者:声明并注释您的订阅方法,可选择指定线程模式:
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {
/* event fire here when you post event from other class or fragment */
};
注册并取消注册您的订阅者。例如,在Android上,活动和片段通常应根据其生命周期进行注册:
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);//Register
}
UNREGISTER
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);//unregister
}
发布活动:
EventBus.getDefault().post(new MessageEvent());//post event
答案 1 :(得分:2)
您可以将EventBus视为轻量级通信渠道,用于在活动,服务或片段之间或其中任何一个之间传递数据。
将EventBus视为您应用中的基础层,它独立于任何活动的活动或服务或片段及其生命周期。
EventBus的主要概念是您订阅活动或片段或服务中的事件或任何类似的组件,以及每当EventBus具有特定事件时您订阅了,通知您订阅的方法在该组件中,您可以根据您收到的事件执行任何任务。
触发活动非常简单,您可以通过传递特定活动(基本上是POJO类,让我们说<)来从您应用的任何区域进行操作/ em> MyEvent
)到EventBus,总线将处理其余部分并正确地将其传送到适当的接收器。
我建议您尝试从GreenRobot尝试 EventBus 3 ,并在此处查看他们的文档,以便在您的代码中合并他们的库。我一直在使用它没有任何问题。
希望这有帮助。
答案 2 :(得分:2)
大多数情况下你不应该这样做。一般来说,当你错误地将你的程序设置为错误并且无法将数据从一个点传递到另一个点时,由于你的应用程序被封装的方式以及在什么级别知道哪些对象,这是一个黑客攻击。它可能会导致真正的意大利面条代码,因为很难确定事件发生时实际调用的代码。你不应该围绕拥有一个事件总线来编写你的代码,如果你不能以正确的方式重构事物,它应该是最后的手段。
答案 3 :(得分:1)
事件的一个优点是,您可以将对象传递到“某处”,而您无需知道它被拾取的位置。这样可以轻松地将活动或片段状态推送到控制器类,然后使用从此控制器发送的事件返回到活动或片段。
由于事件,控制器不需要知道接收端是活动还是片段。这使得很容易为另一个切换。另一方面,这也使得将控制器放在其他地方变得容易。首先,您将它作为应用程序类中的实例,然后将其移动到服务中。
我写了一篇文章,其中有一个非常具体的例子,说明如何使用事件处理Android生命周期,如上所述:https://medium.com/@JuliusHuijnk/beating-the-android-life-cycle-d00a2f3ed88