将Activity Context传递给内部使用的构造函数 - 这很糟糕

时间:2010-05-26 15:44:45

标签: android memory-leaks android-context

将Context传递给构造函数并将其保存为私有变量以供内部使用是不好的做法?另一种选择是将Context作为参数传递给需要它的方法。

哪个更好? 我有一种感觉,传递给构造函数可能会意外地导致内存泄漏。

3 个答案:

答案 0 :(得分:11)

通常,您所需要的只是ApplicationContext,因此您可以做的就是通过this.getApplicationContext()而不只是this。无论如何,您的应用程序上下文在应用程序的生命周期中都存在,因此它不是内存泄漏。

答案 1 :(得分:9)

这取决于对象的生命周期。如果您确定Object只能在您的Activity内部使用,那么您可以将Context传递给构造函数,否则不要传递Context。

如果一个Object有一个对Context的引用,这将停止Activity被Garbage Collected,并且由于一个Activity引用了它的所有视图,这意味着你可以很快地泄漏大量内存。

很容易让自己陷入困境,因为像设备轮换这样的事情会导致重新创建活动,并且很容易挂起到对象而没有意识到。

因此,最好是安全起见,并在需要时传递上下文。

答案 2 :(得分:1)

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

更好的做法是将Resources对象声明为主应用程序中的公共静态,然后在其他地方使用它,因为资源就是您所需要的。

相关问题