将Context传递给构造函数并将其保存为私有变量以供内部使用是不好的做法?另一种选择是将Context作为参数传递给需要它的方法。
哪个更好? 我有一种感觉,传递给构造函数可能会意外地导致内存泄漏。
答案 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对象声明为主应用程序中的公共静态,然后在其他地方使用它,因为资源就是您所需要的。