Java:(匿名)内部类总是有外部隐式引用吗? Android:这会导致内存泄漏吗?

时间:2013-06-12 11:11:32

标签: java android inner-classes

java问题: 我有一个外部类,其方法是生成匿名内部类。匿名内部类可以“超过”外部类的实例。匿名内部类不使用外部类中的ANYTHING。生成的内部类是否仍然保留对外部类的引用,从而阻止它进入GC?

Android问题:

public class SomeActivity... {


public void onResume(){
   ....
   asyncTask.setCallback(newCallback());
}

private static Callable newCallback(){
   return new Callable()......;
}


}

现在关于newCallback()方法。如果它不是静态的......

当它创建一个实现可调用的新匿名类时,它可以对外部类(当前上下文,Activity)进行隐式引用。 由于异步任务未绑定到android中的任何上下文,因此它可以比Activity活动更长。它的成员也是如此(回调可调用)。并且可调用的可以具有对活动的隐式引用,从而使得上下文(Activity)不可用于GC,从而导致可能很难找到内存泄漏。

我的问题是:如果newCallback方法不是静态的,那么创建的回调是否会保持对外部类的引用,因为回调不使用任何Activity的东西?我是否只是躲过一颗子弹,记得用静态方法外化可调用的生成,所以它没有隐含的活动参考?

0 个答案:

没有答案