Можешь привести примеры ситуаций или факторов, которые могут привести к утечкам памяти в приложениях на Android?
Ответ от нейросети
sobes.tech AI
Основные причины утечек памяти в Android-приложениях:
-
Долгоживущие ссылки на контекст Activity или View. Например, статические переменные, которые хранят ссылку на Activity, не дают ей быть собранной сборщиком мусора.
-
Неправильное использование слушателей и колбэков. Если слушатель не отписан, он может удерживать ссылку на объект.
-
Использование анонимных внутренних классов и лямбд, которые неявно держат ссылку на внешний класс.
-
Неправильное управление ресурсами, например, не закрытые Cursor, InputStream, Bitmap.
-
Использование Handler с задержками или сообщений, которые ссылаются на Activity, но не очищаются при уничтожении.
-
Кэширование больших объектов без ограничения размера.
Пример утечки из-за статической ссылки:
class MyActivity : AppCompatActivity() {
companion object {
var leakedReference: MyActivity? = null
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
leakedReference = this // Activity не будет освобождена
}
}
Чтобы избежать утечек, важно правильно управлять жизненным циклом объектов и освобождать ресурсы.