0

是否有任何用例我想将 BroadcastReceiver 用于跨应用程序通信以外的其他用途?

阅读文档后,似乎它们是针对跨应用程序通信的,但也提到了将它们与 LocalBroadcastManager 一起使用的想法。我还阅读了这篇文章,它解决了广播接收器的一般用法。两者似乎都没有清楚地说明为什么将广播和接收器用于跨应用程序通信以外的任何事情都是有用的。

它是否与它们的异步特性有关,或者它们只是用于将一些处理移出主要活动?

澄清:我想交叉应用这个词太笼统了。我正在考虑内置操作,例如

android.hardware.action.NEW_PICTURE

来自应用程序。我想知道的是:什么时候使用 BroadcastReceiver 在我的应用程序中进行通信有用 - 我想这会将其缩小到自定义意图操作/类别。对不起,如果我问这个的方式令人困惑。我最近才开始使用 Android 进行编程,但我仍然不太了解操作系统。

4

1 回答 1

0

正如它在您链接的帖子中引用的那样:“广播接收器是响应系统范围的广播公告的组件。许多广播来自系统。”

因此,它们在“捕获”系统广播时很有用,例如设备启动时、电池电量变化时、Wi-Fi 开启时等。

就个人而言,每当设备收到短信时,我都会使用 BroadcastReceiver 来启动我的应用程序。在我的情况下,这是首选,因为收到短信时我的应用程序不需要运行。收到后,系统将通过 SMS_RECEIVED 操作广播意图。我的 BroadcastReceiver 组件,注册为接受这种特定类型的广播,将收到通知,然后可以根据需要做出反应。在我的例子中,它会启动一个活动来通知用户短信并选择特定的回复短信。

这只是一个具体的例子。系统会传输许多其他广播,并且您的 Receiver 可以获得。检查此链接和此帖子以获取更多示例。

澄清:

当您希望以相当简单的方式在应用程序组件之间进行通信而无需在系统范围内广播意图时,LocalBroadcastManager 更可取。知道了这一点,当您传递的信息仅供您的应用使用时,您会想要走这条路线。LocalBroadcastManager 比使用 IBinder 接口更有效,通常更简单,并且可以确保信息不会离开您的应用程序。

举个例子,假设你有一个在后台运行的服务来跟踪和记录一些不断变化的数据;假设您的电池电量。该服务可以在没有用户交互的情况下自行运行,在磁盘发生变化时将电池电量保存到磁盘中。当您启动 Activity 以查看所述数据时,它将使用 LocalBroadcastManager 注册接收器以接受 Service 正在发送的信息,并实时更新 Activity 的 UI 以反映这一点。由于没有其他应用程序需要来自您的服务的信息,因此最好这样做而不是广播任何其他应用程序可以访问的意图。

综上所述,使用 LocalBroadcastManager 是:

  1. 更高效。
  2. 更安全。
  3. 更简单。
于 2013-10-21T05:16:21.287 回答