onBind()
方法中的 "bind" 动作与仅调用 onStartCommand()
有何区别?
onStartCommand()
当另一个组件(例如活动)通过调用 startService()
请求启动服务时,系统会调用此方法。
onBind()
当另一个组件通过调用bindService()
方法想要绑定服务(例如执行RPC)时,系统将调用此方法。
我想编写一个聊天客户端服务,可以接收来自多个用户的消息。哪个函数更适合?
onBind()
方法中的 "bind" 动作与仅调用 onStartCommand()
有何区别?
onStartCommand()
当另一个组件(例如活动)通过调用 startService()
请求启动服务时,系统会调用此方法。
onBind()
当另一个组件通过调用bindService()
方法想要绑定服务(例如执行RPC)时,系统将调用此方法。
我想编写一个聊天客户端服务,可以接收来自多个用户的消息。哪个函数更适合?
onStartCommand()
)是在您的Service
开始工作时调用的。 onCreate()
已经完成,准备好做需要做的事情了。onBind()
)是当另一个线程注册连接到Service以便它们可以通信时调用的。您可以在此处配置或设置通信方式,例如接口验证或回调到注册活动。onStartCommand()和onBind()是Service类的回调方法。
onStartCommand()
方法在Service类第一次创建时调用onCreate()
方法后。当任何其他Android组件启动相同服务时,Service会在onStartCommand()
方法中接收新请求。
onBind()
方法在另一个Android组件使用bindService()
方法尝试连接已运行的Service时调用。它被用于向Service传递一些新信息或尝试建立Service连接。
一个绑定服务将在没有与之绑定的活动时结束。绑定还允许您通过像 AIDL
这样的接口向其发送附加命令。在您的情况下,我认为您需要一个绑定服务,因为您可能不希望服务超出活动的生命周期。
bindService()
来创建服务,并且onStartCommand()
没有被调用,那么服务只在组件绑定它的期间运行。当服务从所有客户端取消绑定后,系统将销毁它。因此,如果活动通过onBind()
解除绑定,不会触发销毁你的服务。当使用startService()启动服务时,如果一个组件(如Activity)调用bindService()创建该服务,并且onStartCommand()没有被调用,则该服务仅在组件绑定到它时运行。当服务从其所有客户端解除绑定后,系统会销毁它。
如果一个组件通过调用startService()(导致调用onStartCommand())来启动服务,则服务将一直运行,直到它自行停止(stopSelf())或另一个组件通过调用stopService()来停止它。