Android 将活动上下文传递给构造函数以在内部使用-这是错误的吗

Android 将活动上下文传递给构造函数以在内部使用-这是错误的吗,android,memory-leaks,android-context,Android,Memory Leaks,Android Context,将上下文传递给构造函数并将其保存为私有变量以供内部使用是否是一种错误的做法?另一个选项是将上下文作为参数传递给需要它的方法 哪一个是更好的选择? 我觉得传递给构造函数可能会意外导致内存泄漏。这取决于对象的生存期。如果您确定该对象只在您的活动内部使用,则可以将上下文传递给构造函数,否则不要将上下文传入 如果一个对象有一个对上下文的引用,这将停止对活动进行垃圾收集,并且由于一个活动有对其所有视图的引用,这意味着您可以很容易地很快泄漏大量内存 在这里很容易发现你自己,因为像设备旋转这样的事情会导致活动

将上下文传递给构造函数并将其保存为私有变量以供内部使用是否是一种错误的做法?另一个选项是将上下文作为参数传递给需要它的方法

哪一个是更好的选择?
我觉得传递给构造函数可能会意外导致内存泄漏。

这取决于对象的生存期。如果您确定该对象只在您的活动内部使用,则可以将上下文传递给构造函数,否则不要将上下文传入

如果一个对象有一个对上下文的引用,这将停止对活动进行垃圾收集,并且由于一个活动有对其所有视图的引用,这意味着您可以很容易地很快泄漏大量内存

在这里很容易发现你自己,因为像设备旋转这样的事情会导致活动被重新创建,并且很容易在没有意识到的情况下抓住一个对象


因此,最好是出于安全考虑,在需要时在上下文中传递它。

通常,您只需要
ApplicationContext
,所以您可以做的是传递
this.getApplicationContext()
,而不是只传递
this
。您的应用程序上下文在应用程序的整个生命周期内都存在,因此它不是内存泄漏。

在主应用程序(启动)中,声明一个变量appContext:“public static context appContext;” 然后,在此主应用程序的onCreate()方法中,分配:“appContext=this 因为appContext是公共的,所以这个包中的任何其他类都可以使用appContext来跟踪XML资源。 (从记忆的角度来看)这样更好吗


更好的做法可能是在主应用程序中将Resources对象声明为public static,然后在其他地方使用它,因为您只需要资源。

实际上,通常我只想使用getResources(),这样就可以完成我的任务,对吗?当然,如果您只需要这些,请不要使用getApplicationContext())除非你真的知道那是你想要的。您将使用它的主要情况是用于独立于特定活动的全局对象。对于与特定活动关联的对象,通常最好使用该活动的上下文。(对于那些,在私有变量中保持上下文是很好的,只要你没有其他的全局对象引用它,从而导致泄露)。@ HACKBOD:那么,为了访问资源,你会认为这是一个可接受的情况吗?如果你只需要资源对象,你可以使用它。每个.apk都有一个全局资源实例。只有当引用您上下文的对象是静态的,或者至少是由另一个比活动更久的对象持有时,才是这样。感谢您提出这个问题!我没有真正考虑内存泄漏就这么做了