Почему не рекомендуется создавать объекты в onDraw у View

«Почему не рекомендуется создавать объекты в onDraw у View» — вопрос из категории UI и Views, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Создание объектов в onDraw() приводит к частым аллокациям памяти, т.к. метод вызывается при каждом перерисовке View (60 раз/сек для 60fps). Это провоцирует GC сборки, что вызывает лаги в UI. Лучше инициализировать объекты заранее (например, в конструкторе View) и переиспользовать их.

Пример плохого кода:

override fun onDraw(canvas: Canvas) {
    val paint = Paint() // Создается каждый вызов onDraw
    paint.color = Color.RED
    canvas.drawCircle(50f, 50f, 25f, paint)
}

Хороший вариант:

private val paint = Paint() // Инициализируется один раз

override fun onDraw(canvas: Canvas) {
    paint.color = Color.RED
    canvas.drawCircle(50f, 50f, 25f, paint)
}