问题标签 [event-bus]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1631 浏览

android - 将演示者类注册到 EventBus (android MVP)

我在我的 android 应用程序中使用了 greenrobot 的 EventBus,我非常喜欢它。

但是,现在我想通过使用演示者(MVP)将逻辑与我的片段分开。

以下是可能的,它有用吗?

分段:

主持人:

这有意义吗?

或者从总线和复杂的片段生命周期中取消注册演示者甚至是危险的?

编辑:将总线注册移动到演示者本身(感谢 Nicklas)。

对这个架构还有更多的评论吗?

0 投票
1 回答
5123 浏览

android - Android 的优点和缺点:事件总线和 RxJava

我一直在我的应用程序中使用事件总线(即:greenrobot/EventBus)。但是我发现使用事件总线有一些缺点:

  • 链接任务执行很困难
  • 很多类来表示事件
  • 不太清晰的代码(嗯,它仍然可以追踪,但不是那么清晰)

我一直在研究解决这个问题的新技术。我读了很多关于 RxJava 的文章,想知道它是否可以成为一个解决方案。

所以我关于 RxJava 的问题(基于我最近阅读的内容):

  • RxJava 观察者可以随时注册吗?所以不仅仅是在创建 Observable 时。使用 EventBus,这是可能的,我可以随时订阅,而不仅仅是在创建 Observable 时。
  • 您如何处理两个或多个发布者发布相同类型的事件(例如:导航事件)?
  • 将发布者和订阅者紧密耦合意味着我每次都必须明确指定发布者。所以我不仅要担心事件的类型,还要担心发起者。使用 EventBus,我只需要担心事件的类型而不是发起者。
0 投票
1 回答
1457 浏览

android - Is an event bus unregister necessary

I'm implementing MVP pattern in Android and I'm using EventBus to let know the Presenter from activity "A" that something happen at activity "B" to update views from "A".

I registered the presenter to EventBus inside in constructor but I don't see any place where I could unregister it.

  1. Is it necessary to unregister at all, when the presenter is suppose to live as long as application (it is not recreated on configuration change)?
  2. When user leaves the application (closes activity "A") will the references be freed or is it a memory leak?
0 投票
1 回答
926 浏览

java - 在 Android 中使用带有 Activity 生命周期方法和库实现的事件总线

我正在尝试将事件总线添加到我的项目中,因为为了使代码更具可读性和应用程序健壮性,这是一个非常好的模式。
我需要听 Activity 生命周期方法。
让我解释一下为什么我需要这个。
我有活动,在此活动中,有一个正在运行的线程(或多个线程)与此活动完全相关,主 UI 线程将一些 UI 更改发布到主队列。
当活动将被破坏或暂停时,我需要暂停线程并在活动再次出现在屏幕上时恢复它。
当然我可以直接在 onDestroy 和 onStart 方法中暂停/恢复线程,但是还有一些其他组件也需要监听 Activity 生命周期方法。
有我的问题:

  1. 在这种情况下使用EventBus是否正确,或者最好直接在活动生命周期方法中执行所有操作而不使用事件总线。在活动生命周期中使用事件总线是模棱两可和不正确的。

    公共类 ExampleActivity 扩展 Activity {

    我在这里看到的一个优点是,每次您的部分活动需要时,您不必在活动生命周期方法中添加一些逻辑。Activity 内容可以很复杂,也可以使用 Fragment,当然你也可以使用 Fragment 生命周期方法。但是我想知道片段是否不会被销毁到调用活动生命周期方法的时候,我还没有测试过。所以这里的主要问题是使用本机钩子方法机制在这里做需要的东西或使用事件总线更好。

  2. 下一个问题与主要问题没有直接关系。问题是关于android 的EventBus( EventBus Link ) 库的实现方式。为什么不让 listeners( bus.register(this);) 实现接口,例如用一种方法订阅onEvent(BusEvent event);。为什么不让这个方法接受一些基本类BusEvent。每次发生事件并onEvent调用方法时,都会在库实现中使用反射。我没有看到这种方法有任何优势,并且反射在 Java 中是相当重要的事情。

我将非常感谢任何答案或建议。

0 投票
2 回答
1347 浏览

java - 一次刷新多个 Realm 实例?

我正在使用一个设置,其中每个Presenter保留的Fragment都有自己的Realm实例。但是,这实质上意味着这些 Realm 都在主线程上。

现在这也意味着,如果我想修改 Realm,我要么需要在主线程上执行此操作(这对于小型数据集是可以的,但我真的不想对大型数据集执行此操作),或者我需要在后台线程上执行此操作,并一次刷新每个Realm 实例(这可以通过事件总线的简单事件来实现)。

但是假设我在主线程上打开了大约 5-7 个领域实例(因为每个演示者都有自己的开放领域,而它们没有被破坏),我担心性能和/或内存使用情况。

所以我想我有两个问题,

1.) 在主线程上打开多个 Realm 实例是不好的做法/资源密集型吗?

refresh2.) 使用全局事件在同一个线程上更新多个 Realm 的资源密集程度如何?

0 投票
2 回答
1542 浏览

android - Android中的片段回调与EventBus

我遇到了这个问题。我Activity是片段容器,所以为了在活动和片段之间进行通信,我使用了通用Callback方法。在这种情况下,我的活动必须根据片段数实现大量回调接口。
我不喜欢硬编码和不可读的代码。在我的情况下,我的类声明可能需要几行来列出所有接口。
我正试图摆脱这一点。

还有另一种方法是使用EventBus模式。
活动中

在片段中

并处理活动中的几种事件类型。

也许在这里使用 EventBus 会更好,而不是默认的回调方法?
或者也许是我的错,我的活动包含很多片段(上帝对象),最好使用活动而不是 Fragment ?

请建议哪种方法更好?

0 投票
0 回答
214 浏览

java - 带有 GoogleGuave 事件总线和 JavaFX FXML-UI-Object 的 NullPointerException

我希望有人可以帮助我,因为我不知道:问题:

如果我在我的 GUI 中使用 JavaFX 和 FXML 设置按钮文本,它工作正常。如果我从 GoogleGuave 事件总线运行相同的函数,它会返回 NullPointer 异常。

下面的示例显示了我的问题:函数 setLabel() 将调用两次。第一次来自函数 initialize(URL arg0, ResourceBundle bundle)。一切正常,一切都很好,也不例外。第二次,如果有事件到达,它将从listen(LocalChangeEvent事件)调用。然后返回 NullPointer 异常。

是什么原因?

} 非常感谢!再见梅霍

编辑:

0 投票
1 回答
975 浏览

android - EventBus:每种线程模式之间有什么区别?

根据EventBus doc,有 4 种类型的线程模式EventBus用于传递线程:

  • onEvent()

    • 帖子线程
    • 适合简单的任务
  • onEventMainThread()

    • 主线程
    • 又名 UI 线程
    • 适合 UI 更改
  • onEventBackgroundThread()

    • 背景踏板
    • 使用单线程,按顺序传递事件。
    • 适合需要适度时间的执行。
  • onEventAsync()

    • 异步
    • 使用单独的线程。
    • 适合需要较长时间的执行

问题

  1. onEventBackgroundThread()在使用over之前,我应该检查哪些标准onEventAsync(),反之亦然?有哪些使用其中一种具有明显优势的例子?

  2. 以下每个函数应使用哪种线程模式?

    • 获取设备状态——设备的 GPS 位置(即android.location),互联网连接状态(即ConnectivityManagerNetworkInfo)。

    • 发出简单的 HTTP 请求来接收文本(例如 JSON),需要 1000 毫秒到 5000 毫秒之间的任何时间,平均 2000 毫秒。

    • 发出简单的 HTTP 请求以加载文件大小在 50kb 到 1500kb 之间的图像(在向服务器发出请求之前,客户端不知道确切的大小)。

    • 将数据缓存到内部数据库(例如SharedPreferencesSQLite等)。

0 投票
1 回答
2787 浏览

routing - Akka 消息传递机制示例

我有相当多的 Apache Camel(路由/中介/编排引擎;轻量级 ESB)经验,并且正在绞尽脑汁试图理解 Akka 之间的区别:

  • 调度员 ( Dispatcher, PinnedDispatcher, CallingThreadDispatcher)
  • 路由器
  • 游泳池
  • 团体
  • 事件总线

根据文档:

调度员是:

...是让 Akka Actors “滴答作响”的原因,可以说是机器的引擎。

但这并不能真正解释什么是调度程序或它与演员的关系是什么。

路由器是:

消息可以通过路由器发送,以有效地将它们路由到目标参与者,称为路由。路由器可以在actor内部或外部使用,您可以自己管理路由或使用具有配置功能的自包含路由器actor。但这听起来很像调度员。

是:

[一种] 路由器 [它] 创建路由作为子角色,并在它们终止时将它们从路由器中删除。

是:

[A type of] actor [where routees] 在路由器外部创建,路由器使用 actor 选择将消息发送到指定路径,而无需注意终止。

事件总线是:

...一种向演员组发送消息的方法

这听起来就像调度程序和路由器。

所以我主要担心的是:

  • 调度程序、路由器和事件总线之间有什么区别,以及何时使用它们?
  • 何时使用池与组?
0 投票
2 回答
2862 浏览

android - 构建 proj 时的 EventBus 异常 - 订阅者类没有称为 onEvent 的公共方法

因此,我的应用程序在 MainActivity 与后台服务之间交换消息,我使用EventBus来处理它。我正在注册这两个组件

在他们的 onCreates 上。我正在发送/接收一个事件:

当我将项目从我的 AndroidStudio 运行到我的测试手机时,一切正常。但是,当我生成签名的 APK 时,我安装了该应用程序并发生了崩溃,并出现以下异常:

它显然有的地方。我尝试在我的 MainActivity 中将其从更改为onEventonEventMainThread但没有成功。自从我即将发布应用程序以来,这非常令人沮丧,现在我无法解决这个问题。

我经历过这个这个,但他们没有帮助。

有任何想法吗?