我有很多 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中描述的耦合不强
- 上面 #1 中描述的耦合并不明显
- 事件总线引入了简单回调的性能开销
- 如果事件总线持有对订阅者的强引用(例如 GreenRobot's EventBus 的情况),那么未注册的订阅者将导致内存泄漏
鉴于所有这些缺点,简单的回调应该是默认的实现选择。
仅当不需要或难以实现直接耦合时才应使用事件总线。例如:
- 将事件从
Service
发送到Activity
- 在独立的
Fragments
之间交换事件
- 应用程序范围的事件(例如用户登录/注销)
如果通信组件已经“知道”彼此的存在,则它们无需通过事件总线进行通信。
关于android - EventBus vs Callbacks,什么时候使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29008418/