【发布时间】:2019-03-01 18:24:25
【问题描述】:
我有一个看起来很简单的问题,但我有点困惑。我的问题是,在 Android 应用程序中,我出于某些目的对活动进行静态引用。在 onDestroy() 中,我在显式分配空值时将该活动引用设为空。好吗?它是否有资格进行垃圾收集?它还会导致内存泄漏吗?请在这方面帮助我。
这是我在 onCreate() 方法中用于活动参考的代码
mInstance = this;
这就是我在 onDestroy() 中分配空值的方式
@Override
protected void onDestroy() {
super.onDestroy();
mInstance = null;
}
【问题讨论】:
-
不要做静态活动参考。没有充分的理由拥有这样的 Activity 的静态副本。如果你认为你需要它,那么你就是在错误地构建你的应用程序。请记住,任何时候都可能存在 Activity 的多个副本,因此这种技术将无法正常工作。
-
是的,你是对的。我100%同意。我得到了代码,我在许多活动中发现了许多时间活动静态引用。我的问题是,如果我在 ondestroy 方法中为引用分配 null 值,它是否有资格进行垃圾回收?
-
如果没有从垃圾回收根对象到变量的路径,则对象符合回收条件。因此,对某物进行静态引用会使其无法识别,因为静态变量是 gc 根。将其设置为 null 将消除无法识别的单一原因,但仍可能因其他原因无法识别。