我有一个简单的应用程序,使用播放器作为Singleton。
@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
类中,我设置:
INSTANCE = null
当我回到Activity A
时,player
字段仍具有对播放器的引用,并且不为空。
我在这里想念什么?
注意: Activity A
用Java编写,MyPlayer
用Kotlin写(如果重要)
答案 0 :(得分:3)
在活动B中,您仅使变量INSTANCE为null而不是整个对象,如果返回活动A并检查MyPlayer.INSTANCE,则将为null,但是该对象仍存在于内存中。活动A的玩家仍在引用该对象,因此GC无法收集。