我有一项服务,我想确保在不再有任何活动绑定时不停止()。
我知道startService()用于实现这一点,但是可以在服务的onBind()方法中调用它吗?
从活动中调用它对我来说似乎是一个黑客,因为服务知道它是否想要在onUnbind()之后闲逛。
活动指示服务的当前状态并提供一些控制,因此bindService()似乎是在这里使用的适当方法。
答案 0 :(得分:7)
从startService()
内拨打onBind()
应该没问题。如果onBind()
中的逻辑可以确定即使客户端未绑定也需要保持服务,那么这似乎是合理的做法。
我不同意声称不推荐的答案。您所描述的架构正在有效地利用封装。客户端只想绑定/取消绑定,他们不必知道服务是如何(内部)实现的。该服务应该控制自己的生命周期。
答案 1 :(得分:0)
不建议从startService()
拨打onBind()
。 onBind()
用于连接客户端,不应更改行为。
在客户端想要连接之前,让它调用startService()
,如果服务已经运行,它将不起作用,然后客户端对象可以绑定。当客户解除绑定时,服务仍将运行。如果服务知道什么时候不在身边就可以安全地呼叫stopSelf()
并退出。