isp*_*iro 5 android android-service
我已经看到它在多个来源中提到,如果一个Activity绑定一个服务,它应该取消绑定它onDestroy.为什么?由于活动被销毁,似乎该服务无论如何都将被解除绑定.如果它"开始" - 无论如何都没关系.如果它是由活动自动启动的 - 如果没有其他人限制它,它将会关闭.
那么为什么解开呢?
活动需要处理配置更改,例如旋转屏幕或用户更改区域设置,或设备进入夜间模式.
发生配置更改时,前台活动的默认行为是销毁和重新创建它.
因此,呼吁bindService()一个Activity不是一个好主意.我们希望绑定在配置更改中保持不变.否则,我们的服务将与活动一起被销毁和重新创建(假设活动具有唯一绑定,并且没有其他任何启动服务).
因此,推荐的模式是先调用bindService()的Application单.然后,您可以将ServiceConnection旧活动实例传递给新活动实例.保留片段为这个工作的伟大,你可以再调用unbindService()中onDestroy()的的片段,这样,当活动是"永久"破坏(例如,用户按下BACK,你叫finish()),你的绑定可以被释放.
以此为背景,关注您的具体问题.
首先,假设一个破坏活动自动从它必然要通过任何服务解除绑定bindService()上调用了Activity.这种情况可能会发生,但我不记得存在记录的行为,这是开发人员不应该依赖的事情.
更重要的是,在大多数情况下,呼吁bindService()这Activity不是正确的方法.否则,你会遇到我上面列出的问题.
但是,在调用bindService()-on-the- Applicationpattern之后,我不希望有任何类型的自动解绑,因为Application单例永远不会被破坏.因此,如果您未能在unbindService()某处(例如,onDestroy()保留的片段中)调用,您将泄露您的服务.
| 归档时间: |
|
| 查看次数: |
2381 次 |
| 最近记录: |