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

В чем разница между invalidate() и requestLayout()?
Метод View.invalidate() шедулит перерисовку view. Результат вызова этого метода – асинхронный вызов onDraw().
invalidate() используется, когда нужно перерисовать view без изменения размеров, например когда изменяется цвет бэкграунда.

Метод View.requestLayout() асинхронно вызывает методы onMesure() и onLayout() на текущей view и на всех родителях.
Этот метод используется, чтобы обновить view после изменения размеров.

На картинке изображен жизненный цикл view и то, как на него влияют invalidate() и requestLayout(), но есть одна неточность: requestLayout() не гарантирует вызов onDraw().

Чтобы обновить view, requestLayout() следует вызывать вместе с invalidate().