如何在 android 中使用事件总线库

How to use Event bus library in android

我尝试使用事件总线库,但我无法理解它的功能并查看了多个示例。是只用servicesclass还是用activity然后fragment是用activity什么情况我们用event bus在activity还是fragment.

我们可以简单地使用 EventBus 而不是接口。我们可以将消息从一个 class 传递到一个或多个 classes。 EventBus 3 步

  • 定义
  • 注册和注销
  • Post 事件

定义事件:

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 上,activity 和 fragment 通常应该根据它们的生命周期进行注册:

@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);//Register 
 }

注销

@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);//unregister
}

Post 事件:

EventBus.getDefault().post(new MessageEvent());//post event

您可以将 EventBus 视为轻量级通信通道,用于在活动、服务、片段或它们之间传递数据。

将 EventBus 视为应用程序中的底层,它独立于任何活动活动或服务或片段及其生命周期。

EventBus 工作的主要概念是您 订阅事件 在 activity 或片段或服务或任何类似的组件中,只要 EventBus有您订阅的类型的特定事件,它通知您在该组件中订阅的方法,您可以根据该事件在那里执行任何任务你收到了

触发事件很容易,您只需传递特定事件这基本上是一个 POJO class,比方说 MyEvent) 到EventBus,总线会处理剩下的并正确地传递给合适的receiver/s.

我建议您试用 GreenRobot 的 EventBus 3,并在此处阅读他们的文档,将他们的库合并到您的代码中。我一直在用,没有任何问题。

EventBus 3 by GreenRobot

希望对您有所帮助。

大多数情况下你不应该这样做。通常,当您错误地构建程序并且由于您的应用程序的封装方式以及在哪些级别已知哪些对象而无法轻松地将数据从一个点传递到另一个点时,这通常是一种黑客攻击。它可能会导致真正的意大利面条代码,很难弄清楚当事件发生时实际调用的代码。您不应该围绕拥有事件总线编写代码,如果您不能重构事物以正确的方式工作,它应该是最后的手段。

事件的优点之一是您可以将对象四处传递给 'somewhere',并且您不需要知道它是从哪里拾取的。这使得将您的 activity 或片段状态推送到控制器 class,然后使用从该控制器发送回 activity 或片段的事件变得容易。

因为事件,控制器不需要知道接收端是activity还是片段。这使得将一个切换为另一个变得非常容易。另一方面,这也使得将控制器放在其他地方变得容易。就像首先将它作为应用程序中的一个实例 class,然后将其移动到服务中。

我写了一篇文章,其中包含一个非常具体的示例,说明如何使用事件来处理 Android 生命周期,如上所述:https://medium.com/@JuliusHuijnk/beating-the-android-life-cycle-d00a2f3ed88