服务和广播接收器的区别

5
我正在尝试理解服务(Service)和广播接收器(Broadcast Receiver)之间的区别,因为我认为它们可以完成相同的任务。
例如,我有一个名为App1的应用程序,提供了一个称为ToastHelloWorld的服务,该服务只是创建一个Toast并调用stopSelf()。我使用意图过滤器将其公开给其他应用程序,操作名称为:“com.test.HelloToast”。
现在我有另一个应用程序:App2,我想要使用操作“com.test.HelloToast”隐式地使用服务,所以我调用startService(new Intent("com.test.HelloToast"));
然后它就能工作了。
既然我可以使用服务完成所有事情,并且没有5秒执行限制的限制,为什么要使用广播接收器呢?
我知道大多数“系统事件”都是通过广播公开的,但它们不也可以发布为服务意图吗?
3个回答

4

最大的区别在于BroadcastReceiver默认在主UI线程上运行(您可以指定不同的线程),因此它受到10秒执行规则的限制。而服务则可以无限期地运行,直到操作系统决定终止它们。


4
广播意图通常会发送给注册了该意图的所有广播接收器。(有一个例外情况,即有序意图,其中接收器可以中止传递给优先级较低的接收器)启动或绑定服务的意图仅发送给一个匹配的Service实例。
一些广播意图是粘性的。这意味着它们可能在过去已被发送,并且将在您的应用程序注册接收器时传递。

4

当你想要在后台执行某些长时间运行的过程时,可以使用Service。例如,当你的应用程序关闭时想要播放音乐,这时服务将在后台运行播放音乐。

BroadcastReceiver 用于在某些事件发生时触发一些代码或操作。例如,在设备启动时,如果想要执行某些操作,如日期和时间更改等,可以使用BroadcastReceiver。


1
您还可以在设备启动时启动服务。 - IgorGanapolsky

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