清空 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 不会收集。
我有一个简单的应用程序,它使用一个播放器作为单例。
@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 不会收集。