使静态引用变量为null会被Java垃圾回收吗?

时间:2019-03-01 18:24:26

标签: java android

我有一个看起来很简单的问题,但我有点困惑。我的问题是,出于某些目的,在Android应用程序中我正在静态引用活动。在onDestroy()中,我在明确指定null值的同时使该活动引用为null。好吗?是否有资格进行垃圾收集?还会导致内存泄漏吗?请在这方面帮助我。

这是我用于onCreate()方法中的活动参考的代码

mInstance = this;

这就是在onDestroy()中我分配空值的方式

 @Override
protected void onDestroy() {
    super.onDestroy();
    mInstance = null;
}

3 个答案:

答案 0 :(得分:2)

我不是Android开发人员,因此我将不考虑您的问题就回答您。

是的,一旦不再存在Cells.AutoFilter在堆中分配的空间(可能被收集),则将被收集。像Java中的其他所有对象一样。

无论是否Activity都不会改变。


虽然说实话我不明白为什么

static

您能详细解释一下吗?
这根本不是线程安全的,所以如果您在并发环境中工作,请务必小心。

答案 1 :(得分:1)

是的,如果您将其无效,则将被垃圾回收,但是将活动分配给静态变量是一种反模式,即使最终将其无效,也必须不惜一切代价避免,因为是泄漏活动的最简单方法。

实际上,Android Studio应该已经向您发出了警告。

这里有一些literature,以避免内存泄漏。

答案 2 :(得分:-1)

人们会因此而讨厌我,但在我自己的模块化架构中,我喜欢在 android 上使用它们。是的,如果您没有正确使用它们,则会导致内存泄漏,但它可以节省时间,而时间在我的书中意味着 $$$。当我需要将 Java 对象从一个活动解析到另一个活动时,有不同的选择。 putExtra(JsonString)、putExtra(Parseable)、putExtra(Serializable)。但我只是想创建一个新的静态文件来保存所有我需要临时使用的静态公共函数的对象,以便在将它们放入其他活动后将它们全部无效。这样做时要小心。