可以从Service.onBind()中调用Service.startService()吗?

我有一个服务,我想确保不会停止()当不再有任何活动绑定它。

我知道startService()用于实现这一点,但是可以在服务的onBind()方法中调用它吗?

从活动中调用它对我来说似乎是一个黑客,因为服务知道它是否想在onUnbind()之后闲逛。

活动指示服务的当前状态并提供一些控制,因此bindService()似乎是在这里使用的适当方法。

onBind()调用startService()应该onBind() 。 如果onBind()中有逻辑可以确定服务需要保持onBind() ,即使客户端已经解除绑定,那么这似乎是合理的做法。

我不同意声称不推荐的答案。 您所描述的架构正在有效地利用封装。 客户端只想绑定/取消绑定,他们不必知道服务是如何(内部)实现的。 该服务应该控制自己的生命周期。

不建议从onBind()调用startService()onBind()用于连接客户端,您不应该更改行为。

在客户端想要连接之前,让它调用startService() ,如果服务已经运行,它将无效,然后客户端对象可以绑定。 当客户解除绑定时,服务仍将运行。 如果服务知道什么时候不在它周围就可以安全地调用stopSelf()并退出。