清空Singleton实例和所有字段

时间:2019-02-08 07:48:08

标签: android singleton

我有一个简单的应用程序,使用播放器作为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写(如果重要)

1 个答案:

答案 0 :(得分:3)

在活动B中,您仅使变量INSTANCE为null而不是整个对象,如果返回活动A并检查MyPlayer.INSTANCE,则将为null,但是该对象仍存在于内存中。活动A的玩家仍在引用该对象,因此GC无法收集。