android - EventBus vs Callbacks,什么时候使用?

标签 android callback event-bus

我有很多 Activity 会引发后台任务; Activity 将自己传递为已实现监听器回调,以便后台任务可以在 Activity 上引发事件。反过来, Activity 可以在 UI 上显示一些内容,以指示后台 Activity 通过或失败。

或者,我可以使用 EventBus ,其中我让 Activity 将自己注册为监听器/订阅者。我可以让后台任务在 EventBus 上引发一个事件,并且监听它的 Activity 可以处理它。

一个比另一个有什么优势?您什么时候会使用其中一种? (代码清洁度?性能?注意事项?)


跟进 - 我确实最终使用了 EventBus。代码绝对干净多了,而且到处都没有回调。 IDE(IntelliJ)认为 onEvent 方法没有被使用,所以我创建了一个注解

@Target({ElementType.METHOD})
public @interface EventBusHook {}

并将它放在我的 onEvent 方法上。然后 Alt+单击它并要求 IntelliJ 不要将其视为未使用。

@EventBusHook
public void onEvent(MyEventType myEventType){

最佳答案

我不同意@nnuneoi 的回答。

事件总线只有一个优点:它允许在“不知道”彼此存在的组件之间进行通信。

还有几个缺点:

  1. 由于依赖事件总线和特定事件类型,组件变得松散耦合
  2. 上面#1中描述的耦合不强
  3. 上面 #1 中描述的耦合并不明显
  4. 事件总线引入了简单回调的性能开销
  5. 如果事件总线持有对订阅者的强引用(例如 GreenRobot's EventBus 的情况),那么未注册的订阅者将导致内存泄漏

鉴于所有这些缺点,简单的回调应该是默认的实现选择。

仅当不需要或难以实现直接耦合时才应使用事件总线。例如:

  1. 将事件从 Service 发送到 Activity
  2. 在独立的Fragments
  3. 之间交换事件
  4. 应用程序范围的事件(例如用户登录/注销)

如果通信组件已经“知道”彼此的存在,则它们无需通过事件总线进行通信。

关于android - EventBus vs Callbacks,什么时候使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29008418/

相关文章:

java - GreenRobot 和 Guava 的 EventBus 使用反射吗?

java - Akka的事件总线是否保证消息顺序?

Android:在新线程中使用retrofit时出现NetworkOnMainThreadException?

android - setContentSize 在 cocos2dx3.0 中不起作用

安卓动画兼容性

Android - 如何定位 4 个 TextView ?

javascript - D3 : call() not working for appended text element (Type error)

javascript - javascript 中回调的多次返回

javascript - 如何在使用回调完成另一个函数后调用一个函数?

java - 如何找出方法被执行?