Может ли этот код вызвать утечку памяти с Kotlin - PullRequest
1 голос
/ 30 сентября 2019

Если у меня есть объект-компаньон с контекстом удержания другого класса, как показано ниже.

class Sample01Activity: BaseActivity() {

    companion object {
        fun open(context: Context) {
            val intent = Intent(context, Sample02Activity::class.java)
            ActivityCompat.startActivity(context, intent, null)
        }
    }

}

Вызывает ли утечка памяти в этом коде метод open (context)? И если он это сделал, будет ли он исправлен с помощью Weakreference, как показано ниже.

class SampleActivity: BaseActivity() {

companion object {
    fun open(context: WeakReference(Context)) {
        context.get()?.let {
            val intent = Intent(it, Sample02Activity::class.java)
            ActivityCompat.startActivity(it, intent, null)
        }
    }
}

}

1 Ответ

4 голосов
/ 30 сентября 2019

Передача контекста в качестве аргумента не приведет к утечке памяти. Ссылка освобождается после возврата метода.

Если вы присвоите этот контекст полю сопутствующего объекта, это приведет к утечке памяти, но вы никогда этого не сделаете.

...