Android:隐式意图与广播接收者

时间:2014-03-17 01:18:13

标签: android android-intent

我正在加速Android开发,隐含意图和广播接收器之间的区别尚不清楚。我希望能够帮助区分这些概念以及何时使用这两个概念。

两者都接收意图,都对系统消息作出反应,那么为什么甚至需要广播接收器?何时使用它而不是隐式意图和意图过滤器来接受隐含意图?

2 个答案:

答案 0 :(得分:22)

广播就是这样 - 消息向任何人倾听。它们本质上是不安全的,并且无法保证向预期接收者的递送,因为确实没有预期的接收者。例如,CONNECTIVITY_CHANGE广播非常清楚:当Android设备中的连接发生变化时,许多应用可能会感兴趣。它不是ConnectivityManager必须通过特定Intent通知每个应用,而是发送广播。任何已注册对此活动感兴趣的应用都将收到通知。任何没有运行或不关心的应用程序......都不会。

Intent已发送"当一个应用程序或Activity想要启动另一个应用程序来执行非常具体的操作时。例如,文件管理器可能想要启动图像查看器或视频播放器。您的应用可能希望在您的另一个应用中启动非常具体的Activity等。特定意图的通信(即包括包名和组件名称)不容易被截获,因此它有点过分更安全。最重要的是,只有一个"接收器" - 如果找不到,Intent将失败。

此外,BroacastReceiver将在ActivityService内处于活动状态,并且收到的广播通常只会更改状态和/或进行次要的UI更新...例如,您可能会如果您的互联网连接断开,请禁用一些操作。相比之下,特定的Intent通常会启动一个新的Activity或将现有的一个带到前台。

答案 1 :(得分:14)

我将在此列出一个列表,列出隐含意图(通过startActivity()发送)和广播(通过{{1}发送)之间的所有差异})

  1. 默认情况下,广播可以同时影响多个应用程序(有序广播有可能被中断)。相反,Implicit Intents只会影响一个应用程序。 请注意,可能存在多种可能受影响的应用程序,但最终只会有一种。
  2. 隐式意图通过意图过滤器处理,广播通过广播接收器处理(尽管意图过滤器也在此处起作用)。 我在很多网络上看到广播与Intent-filters相比较,对我来说没有意义。
  3. 隐式意图启动活动或服务。相比之下,广播发射广播接收器。 (如果你考虑一下,这是Intents和Broadcasts之间的核心区别。正是由于这个原因,广播并不意味着做太多繁重的工作,尤其是UI工作!)
  4. 来自the Developers Website
  5.   

    BroadcastReceiver无法查看或捕获使用的Intent   with startActivity();同样,当你播放意图时,你会   永远不会找到或开始活动。这两个操作是语义上的   非常不同:使用Intent启动Activity是一个前景   修改用户当前正在与之交互的操作;   广播Intent是用户不是的后台操作   通常意识到。

    如果我发现其他任何内容,我会添加更多。