如果我们有一个这样的对象
object Repo { var activeMovies: ArrayList<Movie>? = null }
然后我们这样调用它来赋值
Repo.activeMovies = movieList
在实例化它的 Activity 完成后,它是否得到垃圾收集?
我知道这可能是一个非常基本的问题,但我无法理解 object
在 Kotlin 中的生命周期。
最佳答案
如果我们像这样创建一个对象:
object Test {
// some functions and properties
}
并将其反编译为Java,我们将看到下一段代码:
public final class Test {
public static final Test INSTANCE;
static {
Test var0 = new Test();
INSTANCE = var0;
}
}
从反编译代码可以看出,object
创建了一个Singleton。初始化发生在一个静态 block 。在 Java 中,静态 block 在类加载时执行。 Test
类的实例是在类加载器加载该类的那一刻创建的。这种方法保证了延迟加载 和线程安全。单例对象的实例保存在该对象类内的静态字段中。因此它不符合垃圾收集的条件。 Test
是一个Singleton,其生命周期与应用程序的生命周期一样长。
这里有一些关于静态变量 Android static object lifecycle 和 static variable null when returning to the app 的有用信息。
关于android - kotlin 中的 "object"是否被垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54052761/