Если вызвать requestLayout() всегда ли вызовется onDraw()

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

Ответ

Вызов requestLayout() не гарантирует вызов onDraw().

requestLayout() запрашивает перерасчет layout (размеры и позиции), но не триггерит перерисовку. Для этого нужно вызвать invalidate(), который помечает View как "грязную" и вызывает onDraw() в следующем цикле рендеринга.

Пример:

view.requestLayout() // Пересчитает layout, но не вызовет onDraw()
view.invalidate()     // Вызовет onDraw()

Исключение: если изменение layout (например, размеров) приводит к изменению внешнего вида View, система может автоматически вызвать invalidate(). Но полагаться на это не стоит.