我正在加速Android开发,隐含意图和广播接收器之间的区别尚不清楚。我希望能够帮助区分这些概念以及何时使用这两个概念。
两者都接收意图,都对系统消息作出反应,那么为什么甚至需要广播接收器?何时使用它而不是隐式意图和意图过滤器来接受隐含意图?
答案 0 :(得分:22)
广播就是这样 - 消息向任何人倾听。它们本质上是不安全的,并且无法保证向预期接收者的递送,因为确实没有预期的接收者。例如,CONNECTIVITY_CHANGE
广播非常清楚:当Android设备中的连接发生变化时,许多应用可能会感兴趣。它不是ConnectivityManager
必须通过特定Intent
通知每个应用,而是发送广播。任何已注册对此活动感兴趣的应用都将收到通知。任何没有运行或不关心的应用程序......都不会。
Intent
已发送"当一个应用程序或Activity
想要启动另一个应用程序来执行非常具体的操作时。例如,文件管理器可能想要启动图像查看器或视频播放器。您的应用可能希望在您的另一个应用中启动非常具体的Activity
等。特定意图的通信(即包括包名和组件名称)不容易被截获,因此它有点过分更安全。最重要的是,只有一个"接收器" - 如果找不到,Intent
将失败。
此外,BroacastReceiver
将在Activity
或Service
内处于活动状态,并且收到的广播通常只会更改状态和/或进行次要的UI更新...例如,您可能会如果您的互联网连接断开,请禁用一些操作。相比之下,特定的Intent通常会启动一个新的Activity
或将现有的一个带到前台。
答案 1 :(得分:14)
我将在此列出一个列表,列出隐含意图(通过startActivity()
发送)和广播(通过{{1}发送)之间的所有差异})
BroadcastReceiver无法查看或捕获使用的Intent with startActivity();同样,当你播放意图时,你会 永远不会找到或开始活动。这两个操作是语义上的 非常不同:使用Intent启动Activity是一个前景 修改用户当前正在与之交互的操作; 广播Intent是用户不是的后台操作 通常意识到。
如果我发现其他任何内容,我会添加更多。