Обнулить экземпляр Singleton и все поля - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть простое приложение, которое использует плеер как синглтон.

@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 голосов
/ 08 февраля 2019

В действии B вы устанавливаете только переменную INSTANCE, равную null, а не весь объект, если вы вернетесь к действию A и проверите MyPlayer.INSTANCE, вы получите null, однако объект все еще присутствует в памяти.Игрок Деятельности A все еще ссылается на объект, поэтому GC не будет собирать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...