Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 调用startService的上下文是什么_Android_Android Context - Fatal编程技术网

Android 调用startService的上下文是什么

Android 调用startService的上下文是什么,android,android-context,Android,Android Context,我在活动中有使用getApplication().bindService()或仅使用bindService()的代码。 一个比另一个好。考虑到活动具有生命周期,在什么情况下应用程序上下文将用于启动/绑定服务。要从活动绑定到服务,请使用应用程序上下文(getApplication())。这是因为绑定本身表示需要作为配置更改处理的一部分进行处理的状态(例如,通过onretainonconfigurationinstance())。一个活动实例可能会绑定,但在配置更改之后才能解除绑定。使用活动作为bi

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

要从活动绑定到服务,请使用
应用程序
上下文(
getApplication()
)。这是因为绑定本身表示需要作为配置更改处理的一部分进行处理的状态(例如,通过
onretainonconfigurationinstance()
)。一个活动实例可能会绑定,但在配置更改之后才能解除绑定。使用
活动
作为
bindService()
上下文
可能会导致内存泄漏(新活动会间接引用绑定到服务的原始活动)

但是,从活动启动服务不涉及活动中的框架强制状态。因此,在活动本身上使用
startService()
启动服务应该很好。

要从活动绑定到服务,请使用
应用程序
上下文(
getApplication()
)。这是因为绑定本身表示需要作为配置更改处理的一部分进行处理的状态(例如,通过
onretainonconfigurationinstance()
)。一个活动实例可能会绑定,但在配置更改之后才能解除绑定。使用
活动
作为
bindService()
上下文
可能会导致内存泄漏(新活动会间接引用绑定到服务的原始活动)


但是,从活动启动服务不涉及活动中的框架强制状态。因此,在活动本身上使用
startService()
启动服务应该可以。

检查这个答案,它对这两个概念有一些澄清。检查这个答案,它对这两个概念有一些澄清。老实说,我从未看到任何
活动
应用程序
上下文上调用
bindService
bind
/
unbind
请求应该配对,这样就不会有泄漏的机会…@pskink:如果您从旧活动解除绑定,服务可能会在您有机会从新活动重新绑定之前关闭,作为配置更改的一部分。现在,如果您确定有其他东西在保持服务运行(例如,它已绑定并已启动),那么这可能不是问题。老实说,我从未在
应用程序
上下文中看到任何调用
bindService
活动
bind
/
unbind
请求应该成对进行,这样就不会有泄漏的机会…@pskink:如果您从旧活动中解除绑定,作为配置更改的一部分,在您有机会从新活动中再次绑定之前,服务可能会关闭。现在,如果您确定有其他东西在保持服务运行(例如,它已绑定并已启动),那么这可能不是问题。