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