服务和广播接收器之间的差异

时间:2010-07-17 18:36:28

标签: android

我试图了解服务和广播接收器之间的区别是什么, 正如我所看到的,他们可以做同样的事情。

例如我有一个应用程序:App1 提供名为ToastHelloWorld的服务,它只创建Toast和stopSelf()。 我使用具有操作名称的intent过滤器将其公开给其他应用程序:“com.test.HelloToast”

现在我有另一个应用程序:App2 我想隐含使用动作“com.test.HelloToast”,所以我打电话 startService(new Intent(“com.test.HelloToast”));

它有效。

为什么我可以使用广播接收器,因为我可以使用服务做任何事情并且没有5秒执行限制的限制?。

我知道大多数“系统事件”是通过广播公开的,但它们不能仅作为服务意图发布吗?

3 个答案:

答案 0 :(得分:4)

广播意图通常会传递给为该意图注册的所有 BroadcastReceivers。 (有序意图有一个例外,其中接收者可以中止低优先级接收者的传递)启动或绑定服务的意图仅发送到一个匹配的服务实例。

某些广播意图是粘性的。这意味着他们可能已经过去发送过,并会在您的应用注册接收器时发送。

答案 1 :(得分:4)

最大的区别在于默认情况下BroadcastReceiver在主UI线程上运行(您可以指定不同的线程),因此它仅限于10秒执行规则。另一方面,服务可以无限期地运行,直到操作系统决定杀死它们为止。

答案 2 :(得分:3)

当您想在后台执行某些操作时使用服务,可以使用后台服务完成任何长时间运行的过程。例如,您希望在应用程序关闭时播放音乐。在这种情况下,服务将在后台运行音乐。

当您想要在某些事件期间触发某些内容或代码时使用BroadcastReceiver。例如,事件可以在Boot of Device上。如果您想在设备启动时执行某些操作,请更改日期和时间等...