为什么取消绑定Service onDestroy?

isp*_*iro 5 android android-service

我已经看到它在多个来源中提到,如果一个Activity绑定一个服务,它应该取消绑定它onDestroy.为什么?由于活动被销毁,似乎该服务无论如何都将被解除绑定.如果它"开始" - 无论如何都没关系.如果它是由活动自动启动的 - 如果没有其他人限制它,它将会关闭.

那么为什么解开呢?

Com*_*are 7

活动需要处理配置更改,例如旋转屏幕或用户更改区域设置,或设备进入夜间模式.

发生配置更改时,前台活动的默认行为是销毁和重新创建它.

因此,呼吁bindService()一个Activity不是一个好主意.我们希望绑定在配置更改中保持不变.否则,我们的服务将与活动一起被销毁和重新创建(假设活动具有唯一绑定,并且没有其他任何启动服务).

因此,推荐的模式是先调用bindService()Application单.然后,您可以将ServiceConnection旧活动实例传递给新活动实例.保留片段为这个工作的伟大,你可以再调用unbindService()onDestroy()的的片段,这样,当活动是"永久"破坏(例如,用户按下BACK,你叫finish()),你的绑定可以被释放.


以此为背景,关注您的具体问题.

首先,假设一个破坏活动自动从它必然要通过任何服务解除绑定bindService()上调用了Activity.这种情况可能会发生,但我不记得存在记录的行为,这是开发人员不应该依赖的事情.

更重要的是,在大多数情况下,呼吁bindService()Activity不是正确的方法.否则,你会遇到我上面列出的问题.

但是,在调用bindService()-on-the- Applicationpattern之后,我不希望有任何类型的自动解绑,因为Application单例永远不会被破坏.因此,如果您未能在unbindService()某处(例如,onDestroy()保留的片段中)调用,您将泄露您的服务.