Гарантирует ли метод invalidate перерисовку View

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

Ответ

Метод invalidate() не гарантирует немедленную перерисовку View. Он помечает View как "грязную" и добавляет её в очередь на перерисовку. Система выполнит перерисовку в ближайшем цикле UI-потока (в onDraw()).

Если нужно принудительно обновить View сразу, можно использовать postInvalidate() (из фонового потока) или комбинацию invalidate() + requestLayout(), если изменились размеры View.

Пример:

view.invalidate() // запланирует перерисовку
// или
view.postInvalidate() // для вызова из не-UI потока