2012-12-04 33 views
16

在什么情况下我应该启动服务,并在什么情况下绑定服务?例如 - 音乐服务的Android客户端?系统优先级的任何差异是否是任何常见规则;还要别的吗?Android服务:绑定还是启动?

回答

18

使用startService()为服务启动后,它们将独立运行。音乐播放器是一个很好的例子。这些运行直到他们拨打stopSelf()或有人打电话stopService()

您可以通过发送意图来回运行的服务进行通信,但在大多数情况下,你只需启动该服务,并让它独立运行。

使用bind()当服务端和客户端将通信来回的持久连接。一个很好的例子是导航服务,它将把位置更新传送回客户端。粘合剂比意图书写起来要困难得多,但它们真的是这种用法的一种方式。

关于优先级:当一个进程的所有活动失去了自己的知名度,过程将成为服务流程如果它承载这是开始onStart()服务,否则就成了一个后台进程。服务进程比后台进程具有更高的优先级。更多详情,请致电android developer site

如果没有可见的活动相关的服务过程中需要更高的优先级(例如,这确实不应该中断的音乐播放器),该服务可以调用startForeground()

+2

Google开发者教程提到绑定'“对于需要将活动绑定到自己的服务的音乐应用程序来说非常合适,该服务在后台播放音乐。”然而,你说这就是startService应该是的用于。我在评论,因为现在我正在努力解决同样的问题:绑定或开始。 –

+0

Google开发者教程很糟糕,并且很难领先。 –

+0

真的,无论哪种方式的作品。 startService()通常是将其自身的运行,并绑定服务的最佳选择()通常是当你的应用程序和服务将在后面不断的往复沟通的最佳选择。但是你可以使用Intent与startService()风格的服务进行往复通信,或者你可以使用bind()来启动一个服务并让它运行。做任何你想要的方式。坦率地说,活页夹是很多写作的工作,所以我避开它们。您也可以使用ResultReceiver,它是Binder周围的便捷包装。 –