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的东西?我是否只是躲过一颗子弹,记得用静态方法外化可调用的生成,所以它没有隐含的活动参考?