В чем разница между requestLayout и invalidate

«В чем разница между requestLayout и invalidate» — вопрос из категории UI и Views, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

requestLayout() пересчитывает размеры и позиции View (measure/layout), затем вызывает перерисовку (draw). Используется, когда изменились параметры, влияющие на размер или положение (например, изменился текст или padding).

invalidate() только помечает область View как "грязную" и вызывает перерисовку (draw) без пересчета layout. Используется, когда изменилось только содержимое (например, цвет или анимация).

Пример:

// Изменили текст - нужно обновить размеры
textView.text = "New text"
textView.requestLayout()

// Просто изменили цвет - достаточно перерисовать
view.setBackgroundColor(Color.RED)
view.invalidate()