2016-10-13 60 views
1

我在Activity中使用getApplication()。bindService()或bindService()。 比另一个更好。考虑到Activity具有生命周期,在什么情况下,应用程序上下文将用于启动/绑定到服务。调用哪个上下文startService

+0

检查这个答案[链接](http://stackoverflow.com/questions/6446221/get-context-in-a-service),它对这两个概念有一些澄清。 –

回答

4

对于从活动结合到服务,使用Application上下文(getApplication())。这是因为绑定本身表示需要作为配置更改处理的一部分进行处理的状态(例如,通过onRetainNonConfigurationInstance())。一个活动实例可能会绑定,但是在配置更改之后,您可能不会解除绑定。使用Activity作为Context对于bindService()可能引入了内存泄漏(新的活动将间接引用保留回绑定到服务的原始活动)。

但是,起始来自活动的服务不涉及活动中的框架强制状态。因此,在活动本身上使用startService()开始服务应该没问题。

+0

老实说,我从来没有见过任何'Activity'在'Application'上下文中调用'bindService','bind' /'unbind'请求应该配对,所以不会有泄漏的机会... – pskink

+0

@pskink:如果你作为配置更改的一部分,服务可能会在您有机会再次绑定新活动之前关闭。现在,如果您确定其他内容正在使服务保持运行(例如,它已被绑定并启动),那么这可能不是问题。 – CommonsWare