"如何绑定" onBind()
方法的操作与调用onStartCommand()
不同?
onStartCommand()
"当另一个组件(例如活动)通过调用startService()
请求启动服务时,系统会调用此方法。"
onBind()
当另一个组件想要通过调用bindService()
来绑定服务(例如执行RPC)时,系统会调用此方法。
我想写一个聊天客户端服务,它接收来自多个用户的消息。哪种功能更合适?
答案 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()将其停止。