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

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

Ответ

invalidate() перерисовывает View без изменения его размеров или положения. Он помечает область View как "грязную", и система вызывает onDraw() при следующем проходе рендеринга.

requestLayout() запрашивает пересчет layout-параметров (размеров и положения). Вызывает onMeasure() и onLayout() для View и его родителей, если нужно.

Пример:

// Просто перерисовываем View
myView.invalidate() 

// Запрашиваем перерасчет layout (например, после изменения размеров)
myView.requestLayout()

Ключевые отличия:

  • invalidate() - только перерисовка
  • requestLayout() - перерасчет layout + перерисовка
  • requestLayout() затрагивает родительские View
  • invalidate() работает быстрее