Как часто происходит рекомпозиция в Jetpack Compose

«Как часто происходит рекомпозиция в Jetpack Compose» — вопрос из категории Jetpack Compose, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Рекомпозиция в Compose происходит при изменении состояния (State), которое читается внутри Composable-функции. Compose интеллектуально отслеживает зависимости и перекомпонует только те части UI, которые зависят от изменившегося состояния.

Пример:

var counter by remember { mutableStateOf(0) }

Button(onClick = { counter++ }) {
    Text("Clicked $counter times") // Только этот Text будет рекомпонован
}

Здесь при клике рекомпозируется только Text, а не весь Button.

Нюансы:

  • Рекомпозиция может пропускаться, если новые данные идентичны предыдущим (благодаря equals).
  • LaunchedEffect, SideEffect и другие хендлеры могут влиять на частоту рекомпозиций.
  • Чрезмерные рекомпозиции можно оптимизировать через remember, derivedStateOf или key в LazyColumn.