最近,我开始研究一个 Android 项目,该项目停止使用广播接收器,转而使用“监听器”。实际上,此实现使用类似于 this article 的观察者模式(就我而言,甚至涉及 .aidl)。
我不明白的是为什么。我被教导组合优于继承。对我来说,广播接收器就是组合。这是一项原生 Android 功能,每个 Android 开发人员都应该熟悉它。那么为什么,有什么理由我应该放弃我的广播接收器以支持观察者模式?这只是我团队设计不良的产物吗?
更新:
我确实找到了一条评论说这是遵循Single Responsiblity ,但是我不确定我是否遵循,因为任何实现监听器的类都必然有其他责任(例如,管理 UI 生命周期的 Activity )。
最佳答案
使用 BroadcastReceiver
可以将一个组件与另一个组件分离。发件人对其消息的接收者一无所知。它只是发送广播,并不关心它是否被接收和处理。同样的概念有一个事件总线(例如 Otto )。但是全局 BroadcastReceiver
的开销很小,因为它们本质上是一种跨应用程序设施。因此,如果您只需要在一个应用程序内发送事件,我会使用 LocalBroadcastManager或我之前指出的事件总线。
在使用监听器(观察器)的情况下,组件变得紧密耦合,因为发送方有对接收方的引用并且知道它的性质(监听器实现的接口(interface))并且必须检查监听器是否不为空。
关于java - 是否有理由在广播接收器上使用观察者模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23143931/