Android - 多次绑定服务(bindService)

13

在相同的上下文环境中多次使用bindService去绑定同一个服务,这样做是否可行?

我可以使用bindService多次将上下文环境绑定到同一个服务,并且只使用一次unBindService吗?

谢谢。


2
顺便提一下,在Android中,服务是单例的,因此无论如何绑定,您始终会得到相同的服务实例。 - ScouseChris
3个回答

8

同一个上下文中,可以多次绑定到相同的服务,但在我看来这是不好的实践。此外,您不能仅一次取消绑定服务,必须取消绑定所有的ServiceConnection

更新: 为什么我认为这是不好的实践,是因为我无法想象为什么有人需要这样做。此外,我认为连接包装器只会绑定和解除绑定一次,并作为服务的门面接口可能更好,因为它会引入更少的开销和更少的错误(尽管这只是我的意见)。


为什么使用相同的上下文多次绑定到同一服务被认为是一种不良实践? - Vito Andolini
@VitoAndolini,看起来我使用了错误的单词,更像是“在我看来”而不是“考虑到”,对此感到抱歉。我已经更新了答案。 - pepyakin
感谢 @pepyakin 的澄清!本周我正在处理 Android 服务中的 DeadObjectExceptions,并试图弄清楚该做什么和不该做什么。 - Vito Andolini
有很好的理由多次绑定同一服务。例如,如果多个活动需要引用同一服务。但是,如果一个活动已经获得了服务连接,则应该尽可能长时间地保持它,并且不再调用绑定服务。此外,在销毁时必须解除服务的绑定。 - Alfred Faltiska

3
无论您调用多少次bindService,如果使用相同的上下文并且服务此时已连接,Android将忽略您的调用。因此,您只能使用相同的上下文绑定一次服务,并仅解除一次绑定。

1
当您调用绑定服务时,Android框架会检查上下文是否已绑定,如果已绑定,则Android会忽略该调用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接