2012-05-01 36 views
2

Android API中的几个类在其构造函数中需要参数Context,例如ArrayAdapter,SQLiteOpenHelperIntent。从Activity内部创建这样一个对象时,哪个上下文实例更适合传递给它们:this(活动实例本身)还是活动的getApplicationContext()方法返回的对象,为什么?从活动传递给非活动构造函数的上下文实例?

到目前为止,我已经使用了两者,并没有看到在结果功能上的任何区别。有什么经验法则吗?

回答

2

getApplicationContext()方法的文档:

返回的 当前进程的单一的全球应用程序对象的上下文。这通常只适用于需要生命周期与当前上下文分离的 上下文,即与进程的生命周期相关的 ,而不是当前组件。

考虑例如这如何与{@ #registerReceiver(广播接收器,IntentFilter的)}交互:

  • 如果从一个活动上下文中使用,所述接收器正在注册 内的活动。这意味着在活动完成销毁之前,您需要取消注册 ;事实上,如果您不这样做 ,框架将清理您的泄漏注册,因为它会删除 活动并记录错误。因此,如果您使用活动上下文 来注册一个静态的接收器(对进程是全局的,而不是与活动实例关联的 ),那么在您使用的活动被销毁的任何时间点上,您将删除该注册的 。

  • 如果从在此返回的上下文中使用,则接收者正在注册与您的应用程序关联的全局状态 。 因此,它永远不会被注销。如果 接收器与静态数据相关联,而不是特定组件,则这是必需的。 但是使用ApplicationContext的其他地方也容易导致严重 泄漏,如果你忘了注销,解除绑定等

相关问题