9

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

我知道 startService() 用于实现此目的,但是可以从服务的 onBind() 方法中调用它吗?

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

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

4

2 回答 2

9

startService()从内部调用应该没问题onBind()。如果您有逻辑onBind()可以确定即使客户端未绑定服务也需要保持正常运行,那么这似乎是执行此操作的合乎逻辑的地方。

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

于 2013-02-11T14:31:59.770 回答
0

不建议调用startService()from 。是为了连接到客户端,你不应该改变行为。onBind()onBind()

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

于 2013-02-10T18:20:11.780 回答