1

java问题:我有一个外部类,其方法是生成匿名内部类。匿名内部类可以“比”外部类的实例“活得更久”。匿名内部类不使用外部类中的任何东西。生成的内部类是否仍然持有对外部类的引用,从而阻止它被 GC?

安卓问题:

public class SomeActivity... {


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

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


}

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

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

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

4

0 回答 0