这可能是一个愚蠢的问题,但我想知道何时使用bindService
以及何时使用startService
是明智的。
例如:
如果我将bindService
与BIND_AUTO_CREATE
一起使用,则系统会自动启动并创建服务,如下所示:http://developer.android.com/reference/android/content/Context.html#BIND_AUTO_CREATE
什么时候智能,然后使用bindService
和何时startService
?我真的不明白这两个。
答案 0 :(得分:70)
如果您的调用组件(bindService()
)需要通过Activity
与您正在启动的Service
进行通信,则通常会使用ServiceConnection
。如果您不想与Service
进行通信,则只能使用startService()
。您可以在服务和绑定服务之间看到以下差异。
来自文档:
开始
当应用程序组件(例如活动)通过调用startService()启动它时,服务“启动”。一旦启动,服务可以无限期地在后台运行,即使启动它的组件被销毁。通常,启动的服务执行单个操作,不会将结果返回给调用者。例如,它可能通过网络下载或上载文件。操作完成后,服务应该自行停止。
绑定
当应用程序组件通过调用bindService()绑定到它时,服务被“绑定”。绑定服务提供客户端 - 服务器接口,允许组件与服务交互,发送请求,获取结果,甚至跨进程间通信(IPC)进行交互。只要绑定了另一个应用程序组件,绑定服务就会运行。多个组件可以立即绑定到服务,但是当所有组件解除绑定时,服务将被销毁。
您可以在此处阅读更多内容:Android Services,Bound Services
答案 1 :(得分:22)
我同意@Ovidiu Latcu,但有一个重要的注意事项: 当使用绑定服务时,服务在启动它的活动结束时结束(如果它是绑定到该服务的唯一活动)。
因此,如果您想在应用程序处于后台时在后台运行您的服务,
(例如,活动暂停并且对用户不可见)然后您必须启动服务而不限制它并与BroadcastReceiver
进行通信。