Ответ
Android использует механизм VSync (Vertical Synchronization) для синхронизации обновления экрана с частотой дисплея (обычно 60Hz, 90Hz или 120Hz). Кадры рендерятся в буфер и отображаются только при следующем сигнале VSync, что исключает "разрывы" изображения.
Для анимации и плавного UI рекомендуется использовать Choreographer, который синхронизирует выполнение кода с VSync:
val choreographer = Choreographer.getInstance()
choreographer.postFrameCallback(object : Choreographer.FrameCallback {
override fun doFrame(frameTimeNanos: Long) {
// Код для анимации/обновления UI
choreographer.postFrameCallback(this) // Зацикливаем
}
})
Для View-анимаций система автоматически синхронизирует обновления с VSync через RenderThread. В Jetpack Compose используется Composition + Drawing + Frame конвейер, также привязанный к VSync.