TGViewer
Android разработка Android разработка @android_its · 4.88K subscribers
Post #665 1.72K
📱 Kotlin/Android-задача: почему `Context` утечёт в этом коде?


class MyManager(context: Context) {

private val prefs = context.getSharedPreferences("app", Context.MODE_PRIVATE)

fun doSomething() {
// ...
}

companion object {
var instance: MyManager? = null

fun init(context: Context) {
instance = MyManager(context)
}
}
}


Вопрос: что здесь не так и к чему это приведёт?

🔍 Варианты:
• a) Всё работает корректно
• b) Приложение вылетит
• c) Произойдёт утечка памяти
• d) SharedPreferences будет работать некорректно

💡 Разбор:

Если ты передаёшь Activity как context в init(context), то:

- MyManager сохранится в companion object (по сути, глобально)
- а значит, Activity не сможет быть сборщиком мусора (GC) удалена
- это и есть memory leakActivity остаётся в памяти навсегда

Особенно опасно при:
• частых пересозданиях Activity (например, при смене ориентации)
• использовании этого синглтона в фоне

Правильный ответ: c) Произойдёт утечка памяти

🛠️ Решение: всегда передавай `applicationContext`, если сохраняешь ссылку надолго:


fun init(context: Context) {
instance = MyManager(context.applicationContext)
}


📌 applicationContext живёт столько же, сколько и приложение, и не зависит от жизненного цикла Activity.

🧠 Вывод: при создании синглтонов и долгоживущих объектов всегда думай, какой Context ты передаёшь. Это частая ошибка даже среди опытных Android‑разработчиков.
  • 👍 5
  • ❤ 4
  • 🔥 3
More from @android_its
  1. Sep 16, 2026🚀 JetBrains обновила roadmap Kotlin: главный фокус - Multiplatform, Wasm и удобство разра…
  2. Aug 23, 2026✔️ Как работают SAM-conversions Single Abstract Method (SAM) интерфейсы — это интерфейсы т…
  3. Aug 23, 2026🔥 Хочешь быстрее расти в IT? Хватит учиться в одиночку Окружение решает больше, чем кажет…
  4. Aug 19, 2026✔️ Апдейт ChatGPT: изолированный контекст в Projects, тесты для проверки знаний и правки д…
  5. Aug 6, 2026💡 Android/Kotlin: не перезапускайте `Flow` после каждого поворота экрана Частая ошибка в…
  6. Aug 4, 2026🔥 JetBrains открыла исходники KotlinLLM - Kotlin-код, который дописывает себя во время вы…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →