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

jax*_*jax 21 android memory-leaks android-context

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

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

JRL*_*JRL 11

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

  • 请不要使用getApplicationContext(),除非你真的知道这是你想要的.您将使用它的主要情况是独立于特定活动的全局对象.对于与特定活动关联的对象,通常最好使用该活动的上下文.(对于那些,保持私有变量中的上下文是好的,只要你没有其他全局对象持有对它的引用,从而导致泄漏.) (7认同)

Dav*_*ebb 9

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

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

因为像设备轮换这样的事情会导致重新创建活动,并且很容易挂起到对象而没有意识到,所以很容易将自己赶出去.

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

  • 仅当引用您的Context的Object静态保存或至少由另一个超过Activity的Object保持时,才会出现这种情况. (5认同)