什么时候使用bindService和startService时很聪明

时间:2012-12-09 12:44:22

标签: android

这可能是一个愚蠢的问题,但我想知道何时使用bindService以及何时使用startService是明智的。

例如:

如果我将bindServiceBIND_AUTO_CREATE一起使用,则系统会自动启动并创建服务,如下所示:http://developer.android.com/reference/android/content/Context.html#BIND_AUTO_CREATE

什么时候智能,然后使用bindService和何时startService?我真的不明白这两个。

2 个答案:

答案 0 :(得分:70)

如果您的调用组件(bindService())需要通过Activity与您正在启动的Service进行通信,则通常会使用ServiceConnection。如果您不想与Service进行通信,则只能使用startService()。您可以在服务和绑定服务之间看到以下差异。

来自文档:

  

开始

     

当应用程序组件(例如活动)通过调用startService()启动它时,服务“启动”。一旦启动,服务可以无限期地在后台运行,即使启动它的组件被销毁。通常,启动的服务执行单个操作,不会将结果返回给调用者。例如,它可能通过网络下载或上载文件。操作完成后,服务应该自行停止。

     

绑定

     

当应用程序组件通过调用bindService()绑定到它时,服务被“绑定”。绑定服务提供客户端 - 服务器接口,允许组件与服务交互,发送请求,获取结果,甚至跨进程间通信(IPC)进行交互。只要绑定了另一个应用程序组件,绑定服务就会运行。多个组件可以立即绑定到服务,但是当所有组件解除绑定时,服务将被销毁。

您可以在此处阅读更多内容:Android ServicesBound Services

答案 1 :(得分:22)

我同意@Ovidiu Latcu,但有一个重要的注意事项: 当使用绑定服务时,服务在启动它的活动结束时结束(如果它是绑定到该服务的唯一活动)。

因此,如果您想在应用程序处于后台时在后台运行您的服务, (例如,活动暂停并且对用户不可见)然后您必须启动服务而不限制它并与BroadcastReceiver进行通信。