清空 Singleton 实例和所有字段

Null out the Singleton instance and all fields

我有一个简单的应用程序,它使用一个播放器作为单例。

@JvmStatic
fun getInstance(context: Context): MyPlayer {
    return INSTANCE ?: synchronized(this) {
        MyPlayer(context).also {
            INSTANCE = it
        }
    }
}

Activity A 中,我使用

将本地字段分配给播放器实例
val player = MyPlayer.getInstance(appContext)

Activity B 一些动作后,我想释放玩家并清空实例。在 MyPlayer class 我设置:

INSTANCE = null

当我返回 Activity A 时,player 字段仍然有对玩家的引用,并且它不是空的。

我在这里错过了什么?

注: Activity A写在Java,MyPlayer in Kotlin(如果有关系)

在 activity B 中,您只使变量 INSTANCE 为 null 而不是整个对象,如果您返回 activity A 并检查 MyPlayer.INSTANCE 您将得到 null,但是对象是仍然存在于记忆中。 Activity A 的播放器仍在引用该对象,因此 GC 不会收集。