【发布时间】:2014-03-17 01:18:13
【问题描述】:
我正在加快 Android 开发的速度,隐式意图和广播接收器之间的区别尚不清楚。我希望在区分这些概念以及何时使用这两个概念方面得到帮助。
两者都接收意图,都对系统消息做出反应,那么为什么甚至需要广播接收器以及何时使用它而不是隐式意图和意图过滤器来接受隐式意图?
【问题讨论】:
我正在加快 Android 开发的速度,隐式意图和广播接收器之间的区别尚不清楚。我希望在区分这些概念以及何时使用这两个概念方面得到帮助。
两者都接收意图,都对系统消息做出反应,那么为什么甚至需要广播接收器以及何时使用它而不是隐式意图和意图过滤器来接受隐式意图?
【问题讨论】:
广播就是这样——向任何收听的人广播消息。它们本质上是不安全的,并且无法保证交付给预期的收件人,因为确实没有预期的收件人。例如,CONNECTIVITY_CHANGE 广播清楚地表明了这一点:当 Android 设备中的连接发生变化时,许多应用程序可能会感兴趣。而不是ConnectivityManager 必须通过特定的Intent 通知每个应用程序,它发送一个广播。任何对此事件感兴趣的应用都会收到通知。任何未运行或不在乎的应用程序......不会。
当一个应用程序或Activity 想要启动另一个应用程序以执行非常具体的操作时,“发送”Intent。例如,文件管理器可能想要启动图像查看器或视频播放器。您的应用程序可能希望在您的另一个应用程序中启动一个非常具体的Activity,等等。通过特定意图(即包括包名称和组件名称)的通信不容易被拦截,因此它更安全一些。最重要的是,只有一个“接收者”——如果找不到,Intent 将失败。
此外,BroacastReceiver 将在 Activity 或 Service 中处于活动状态,并且接收到的广播通常只会更改状态和/或进行较小的 UI 更新...例如,如果您的互联网连接断开。相比之下,一个特定的 Intent 通常会启动一个新的Activity 或将一个现有的 Intent 带到前台。
【讨论】:
VIEW 操作的应用都可以接收到这个意图。然后操作系统将为此使用“默认”应用程序,或者,如果没有,则在将意图传递给 one 应用程序之前提示用户。一个 Intent 仍然只有 一个 接收者,而广播可能有零个或多个接收者。
我将在此处列出Implicit Intents(通过startActivity()发送)和Broadcasts(通过sendBroadcast()发送)之间的所有区别
BroadcastReceiver 无法查看或捕获使用的 Intent 与 startActivity();同样,当你广播一个 Intent 时,你会 永远找不到或启动活动。这两个操作在语义上 非常不同:使用 Intent 启动 Activity 是前景 修改用户当前正在与之交互的内容的操作; 广播 Intent 是用户不参与的后台操作 通常知道。
如果我发现其他内容,我会添加更多。
【讨论】: