Android中Service和Broadcast Receiver的区别

36
我想知道服务和广播接收器之间的区别,有谁可以指出一个可以在Android移动设备上观察到的例子吗? 谢谢
3个回答

40

服务:如果你想在后台执行某些操作,服务将始终在后台运行,即使应用程序关闭。您可以在单独的进程中创建此服务,并且如果您希望,还可以将您的服务提供给其他应用程序。下载任何内容或音乐是一个好例子。

广播接收器:通常系统会发送一些信息,如果您愿意注册,您的应用程序可以接收到这些信息。通过使用onReceive方法,当发生某些事情时,您可以执行想要的操作。例如,当新短信到达或启动完成时,系统将发送BroadcastReceiver。

这里有一篇很好的文章:服务和广播接收器


27

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

服务示例

BroadcastReceiver用于在事件发生时触发某些内容或代码。例如,事件可能是设备启动。如果您想在设备启动、日期和时间更改等情况下执行某些操作...

BroadcastReceiver示例


这里的区别显然是明显的,但有一种用法使得两者在接收某些事件的帮助下变得相似。我发现在学习使用GCM进行推送通知时,使用了Service。在客户端,他们有两个服务GcmListenerServiceInstanceIdListenerService - 当然我们需要在这里使用服务,以便它们可以在后台运行,但在这种情况下,它们的行为类似于广播接收器,有类似于OnReceive的回调,并且会针对某些广播Intent(通过IntentFilter指定)触发。 - King King

1

我以可能有不同的方式来思考这个问题。一个服务接收到专门发送给你的应用程序的意图,就像一个活动一样。一个广播接收器接收到在设备上安装的所有应用程序广播的意图。

(我之所以说服务有点像活动是因为:你不会向所有安装在设备上的应用程序广播一条消息,说“启动活动MyActivity”。它只针对你特定的应用程序。)

当然,正如其他人提到的,服务可以在后台继续运行,而广播接收器应该尽快完成(例如,如果它运行超过5秒,操作系统可能会将其终止)。广播接收器仍然可以在后台运行(当应用程序关闭时),但在某些情况下。值得一提的是,实际上有两种类型的广播接收器 - 声明在清单中的广播接收器和在上下文中注册的广播接收器。它们具有不同的生命周期和限制 - 前者可以在后台接收广播,但有一定的限制,而后者不能在后台接收广播(应用程序必须运行和活动),但对可以接收的意图类型没有限制。

服务和广播接收器都必须通过意图(intent)被特定地调用,但对于服务来说,这通常是一个特定的调用(例如当您的应用程序启动或用户单击某个按钮时),而对于广播接收器来说,它们不需要明确启动,因为它们将在相关广播发生时自动启动。

以下是我对此的想法:

类型 显示UI? 能在应用关闭后继续运行很长时间吗? 能在应用关闭后接收意图吗? 意图必须专门针对您的应用程序吗? 可以指定的意图受限吗?
活动
服务
清单声明的广播接收器 1
上下文注册的广播接收器

1: 仅当您的目标是Android 8.0或更高版本时才会受到限制。如果意图特别针对您的应用程序,则不适用限制。 受限意图的清单可以在这里找到。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接