Что такое рекомпозиция?Повторное выполнение затронутой части композиции после инвалидации. Не всякое изменение требует этого: если state читается только в layout/draw, может перезапуститься лишь соответствующая фаза. Неизменившиеся вызовы могут быть пропущены. Фазы Compose.
Зачем нужен remember?Он сохраняет вычисленное значение в позиции композиции между рекомпозициями. Выход из композиции или изменение переданных ключей сбрасывает значение. Сам remember не делает обычный mutable-объект наблюдаемым. State.
Что такое state hoisting?Компонент получает текущее значение и событие изменения; хранение передают ближайшему общему владельцу. Локальный UI state может жить в родительском composable, состояние экрана — в state holder/ViewModel. State hoisting.
Почему важен порядок модификаторов?Порядок определяет вложенность поведения. padding(16.dp).background(Color.Red) оставляет отступ снаружи фона, background(Color.Red).padding(16.dp) окрашивает и его. Если clickable стоит перед padding, область отступа входит в обработку нажатия. Modifiers.
Когда Compose может пропустить рекомпозицию функции?С strong skipping (по умолчанию с Kotlin 2.0.20) restartable-функция может пропускаться, если параметры совпали: stable сравниваются через equals, unstable — через идентичность экземпляра. Это не отменяет инвалидацию от прочитанного state. List не становится stable; @Stable/@Immutable — обещания автора, а не замораживание объекта. Strong skipping, stability.
Когда derivedStateOf действительно нужен?Когда результат меняется реже, чем наблюдаемые входы: например, firstVisibleItemIndex > 0 вместо обновления UI на каждый индекс. Это дополнительная стоимость; для обычного объединения двух строк достаточно вычисления в композиции. remember(key) кеширует вычисление по ключам, но не является полным аналогом derivedStateOf. derivedStateOf.
Чем LaunchedEffect отличается от rememberCoroutineScope?LaunchedEffect(key) декларативно запускает корутину и перезапускает её при смене ключа. rememberCoroutineScope() даёт scope для запуска из обработчика события. Обе привязки относятся к композиции, а не автоматически к resumed-состоянию Activity. Effects.