onStartCommand()和onBind()之间的区别

时间:2014-06-21 20:52:14

标签: android android-service

"如何绑定" onBind()方法的操作与调用onStartCommand()不同?

onStartCommand()

"当另一个组件(例如活动)通过调用startService()请求启动服务时,系统会调用此方法。"

onBind()

当另一个组件想要通过调用bindService()来绑定服务(例如执行RPC)时,系统会调用此方法。

我想写一个聊天客户端服务,它接收来自多个用户的消息。哪种功能更合适?

5 个答案:

答案 0 :(得分:7)

onStartCommand()开始工作时,会调用第一个(Service)。 onCreate()已经完成,并且已准备好完成需要完成的工作。

当另一个线程注册连接到服务以便它们可以进行通信时,将调用第二个(onBind())。您可以在此处配置或设置通信方式,例如接口验证或回调注册活动。

绑定允许您将服务绑定到例如活动的生命周期。如果活动完成,则允许释放服务并自行完成。只要有一些东西仍然存在,服务将持续。

答案 1 :(得分:2)

绑定服务将在没有更多活动绑定时结束。绑定还允许您通过AIDL等接口向其发送附加命令。在您的情况下,我认为您需要一个绑定服务,因为您可能不希望该服务比活动更长。

答案 2 :(得分:0)

实际上,如果组件调用bindService()创建服务而未调用onStartCommand(),则仅在组件绑定到该组件时,该服务才会运行。服务从其所有客户端解除绑定后,系统将销毁它。因此,通过onBind()如果活动破坏了您的服务,则不会触发。

答案 3 :(得分:0)

onStartCommand() onBind()是Service类的回调方法。

onStartCommand()第一次在Service类的onCreate()方法之后调用。下一次,每当其他Android组件启动相同服务时,Service就会以onStartCommand()方法接收新请求。

onBind()在另一个Android组件尝试使用bindService()方法与已经运行的Service连接时调用。它用于将一些新信息传递给service或尝试建立Service连接。

答案 4 :(得分:0)

根据official documentation, 使用bindService()启动服务时

如果某个组件(即Activity)调用bindService()创建服务,而未调用onStartCommand(),则该服务仅在组件绑定到该组件时才运行。服务从其所有客户端解除绑定后,系统将销毁它。

以及使用startService()启动服务时

如果组件通过调用startService()启动服务(这导致对onStartCommand()的调用),则该服务将继续运行,直到通过stopSelf()使其自身停止运行,或者另一个组件通过调用stopService()将其停止。