java - 是否有理由在广播接收器上使用观察者模式?

标签 java android

最近,我开始研究一个 Android 项目,该项目停止使用广播接收器,转而使用“监听器”。实际上,此实现使用类似于 this article 的观察者模式(就我而言,甚至涉及 .aidl)。

我不明白的是为什么。我被教导组合优于继承。对我来说,广播接收器就是组合。这是一项原生 Android 功能,每个 Android 开发人员都应该熟悉它。那么为什么,有什么理由我应该放弃我的广播接收器以支持观察者模式?这只是我团队设计不良的产物吗?

更新:

我确实找到了一条评论说这是遵循Single Responsiblity ,但是我不确定我是否遵循,因为任何实现监听器的类都必然有其他责任(例如,管理 UI 生命周期的 Activity )。

最佳答案

使用 BroadcastReceiver 可以将一个组件与另一个组件分离。发件人对其消息的接收者一无所知。它只是发送广播,并不关心它是否被接收和处理。同样的概念有一个事件总线(例如 Otto )。但是全局 BroadcastReceiver 的开销很小,因为它们本质上是一种跨应用程序设施。因此,如果您只需要在一个应用程序内发送事件,我会使用 LocalBroadcastManager或我之前指出的事件总线。

在使用监听器(观察器)的情况下,组件变得紧密耦合,因为发送方有对接收方的引用并且知道它的性质(监听器实现的接口(interface))并且必须检查监听器是否不为空。

关于java - 是否有理由在广播接收器上使用观察者模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23143931/

相关文章:

java - android studio Arraylist按降序排序

java - Android Volley 请求未更新

java - 如何从包含的文件中删除/禁用/覆盖附加程序?

java - 将值从 Mono/Flux 传递到方法

android - 检查/取消检查单选按钮状态

java - Activity 可见生命周期和前台生命周期有什么区别?

java - 将自定义 MediaType 映射到 JSON MediaType

android - TalkBack 读取时间错误

Android 无法合并 dex 错误。查看内容

Android如何修复相机方向