Какие знаешь причины рекомпозиции в Jetpack Compose

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

Ответ

  1. Изменение состояния (State) – рекомпозиция вызывается при изменении любого State или MutableState, за которым следит remember.
    var count by remember { mutableStateOf(0) }
    Button(onClick = { count++ }) { Text("$count") } // Рекомпозиция при клике
  1. Изменение входных параметров (@Composable) – если аргументы функции меняются, Compose перезапускает её.

  2. Обновление key в LazyColumn/LazyRow – изменение key приводит к рекомпозиции соответствующего элемента.

  3. Принудительная рекомпозиция (invalidate) – можно вызвать вручную через CompositionLocal.current.recomposeScope.invalidate().

  4. Изменение CompositionLocal – если значение CompositionLocalProvider обновляется, все @Composable, использующие его, рекомпозируются.

  5. Эффекты (LaunchedEffect, SideEffect) – могут запускать рекомпозицию при изменении ключей или состояния.

  6. *Анимации (`animateAsState`)** – анимируемые значения вызывают рекомпозицию на каждом кадре.