onStartCommand()和onBind()的区别

12

onBind() 方法中的 "bind" 动作与仅调用 onStartCommand() 有何区别?

onStartCommand()

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

onBind()

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

我想编写一个聊天客户端服务,可以接收来自多个用户的消息。哪个函数更适合?

5个回答

11
第一个(onStartCommand())是在您的Service开始工作时调用的。 onCreate()已经完成,准备好做需要做的事情了。
第二个(onBind())是当另一个线程注册连接到Service以便它们可以通信时调用的。您可以在此处配置或设置通信方式,例如接口验证或回调到注册活动。
绑定允许您将服务与生命周期绑定,例如,与一个活动相关联。如果活动完成,则允许释放服务并自己完成。只要还有东西绑定到它,服务就会持续存在。

4

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

onStartCommand()方法在Service类第一次创建时调用onCreate()方法后。当任何其他Android组件启动相同服务时,Service会在onStartCommand()方法中接收新请求。

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


2

一个绑定服务将在没有与之绑定的活动时结束。绑定还允许您通过像 AIDL 这样的接口向其发送附加命令。在您的情况下,我认为您需要一个绑定服务,因为您可能不希望服务超出活动的生命周期。


1
事实上,如果一个组件调用bindService()来创建服务,并且onStartCommand()没有被调用,那么服务只在组件绑定它的期间运行。当服务从所有客户端取消绑定后,系统将销毁它。因此,如果活动通过onBind()解除绑定,不会触发销毁你的服务。

0
根据官方文档,当使用bindService()启动服务时,

如果一个组件(如Activity)调用bindService()创建该服务,并且onStartCommand()没有被调用,则该服务仅在组件绑定到它时运行。当服务从其所有客户端解除绑定后,系统会销毁它。

当使用startService()启动服务时,

如果一个组件通过调用startService()(导致调用onStartCommand())来启动服务,则服务将一直运行,直到它自行停止(stopSelf())或另一个组件通过调用stopService()来停止它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接