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

时间:2013-02-10 18:05:32

标签: android android-service

我有一项服务,我想确保在不再有任何活动绑定时不停止()。

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

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

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

2 个答案:

答案 0 :(得分:7)

startService()内拨打onBind()应该没问题。如果onBind()中的逻辑可以确定即使客户端未绑定也需要保持服务,那么这似乎是合理的做法。

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

答案 1 :(得分:0)

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

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