2013-10-21 53 views
0

是否有任何使用BroadcastReceiver的应用程序用于除跨应用程序通信以外的其他用途?何时使用BroadcastReceiver进行非跨应用程序通信?

阅读documentation后,它看起来像是针对跨应用程序通信,但也提到了将它们与LocalBroadcastManager一起使用的想法。我还读了this post,它解决了广播接收机的一般用法。似乎没有明确指出为什么将广播和接收器用于除跨应用程序通信以外的任何其他应用程序是有用的。

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

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

android.hardware.action.NEW_PICTURE 

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

回答

0

正如它在引用的帖子中引用的那样:“广播接收器是响应系统广播通知的组件,许多广播都来自系统。

因此,他们是在“恶补”系统广播,例如,当设备启动时,有用的,当电池电量变化,当你的Wi-Fi已打开,等

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

这只是一个具体的例子。还有很多其他的广播是由系统传输的,您的Receiver可以获得。更多示例请参考linkpost

澄清:当你想无意图的应用组件之间的通信,而简单的方式被广播的全系统

甲LocalBroadcastManager是在实例优选的。知道这一点,当你传递的信息只被你的应用程序使用时,你会想走这条路。 LocalBroadcastManager更高效,通常比使用IBinder接口更简单,并且可以确保信息不会离开您的应用。

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

综上所述,使用LocalBroadcastManager是:

  1. 更高效。
  2. 更安全。
  3. 更简单。
+0

感谢您的回复;我相信你提到了我所问的问题,但现在我想我所问的并不是我想要的答案。我已更新我的问题以澄清我的意图。你可以看一下吗? – Mack

相关问题