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

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

两者都接收意图,既对系统消息作出反应,为什么广播接收机甚至需要,何时使用,而不是隐含的意图和意图filter接受隐式意图?

Solutions Collecting From Web of "Android:隐式意图与广播接收器"

广播就是这样 – 广播给任何听的消息。 它们固有地不安全,并且不能保证交付给预期的收件人,因为实际上不是预期的收件人。 例如, CONNECTIVITY_CHANGE广播使得这一点非常明显:当Android设备中的连接发生变化时,许多应用程序可能会感兴趣。 ConnectivityManager不是通过特定的Intent通知每个应用程序,而是发送广播。 任何已注册此事件的应用程序将被通知。 任何不运行或不关心的应用程序将不会。

当一个应用程序或Activity想要启动另一个应用程序来执行非常具体的事情时, Intent被“发送”。 例如,文件pipe理器可能想要启动图像查看器或video播放器。 您的应用程序可能要在另一个应用程序中启动一个非常具体的Activity等。特定意图(即包括包名称和组件名称)的通信不容易被拦截,因此它更安全一些。 最重要的是,只有一个“接收者” – 如果找不到, Intent就会失败。

此外, BroacastReceiver将在ActivityService处于Activity状态,接收到的广播通常只会改变状态和/或进行较小的UI更新…例如,如果您的Internet连接断开,您可能会禁用一些操作。 相比之下,一个特定的意图通常会启动一个新的Activity或带来一个现有的前景。

我将在这里编译一个列表,列出Implicit Intents (通过startActivity()发送)和Broadcast (通过sendBroadcast()发送)之间的所有区别。

  1. 广播,默认情况下,可以一次影响多个应用程序(有序广播可能会被打乱)。 相反,隐含意图只会影响一个应用程序。 请注意,应用程序可能会受到多种可能的影响,但最终只有一种可能。
  2. 隐式意图通过意图filter来处理, 广播通过广播接收器来处理(虽然意图filter也在这里起作用)。 我曾经在networking上看到广播与意图filter的比较,这对我来说没有任何意义。
  3. 一个隐式的意图启动一个活动,或一个服务。 相比之下,广播发射广播接收机。 (如果你仔细想想,这是Intents和Broadcasts之间的核心区别,正是因为这个原因,广播并不是要做太多繁重的工作,特别是UI工作!
  4. 从开发者网站 :

BroadcastReceiver无法查看或捕获与startActivity()一起使用的Intents。 同样,当你播放一个意图,你永远不会find或启动一个活动。 这两个操作在语义上非常不同:用Intent启动一个Activity是一个前台操作,它修改了用户当前正在与之交互的内容; 广播Intent是用户通常不知道的后台操作。

如果我find其他东西,我会添加更多。