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

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

Ответ

Функция рекомпозируется только при изменении входных аргументов. Для Stable типов Compose считает, что значение не изменилось, если:

  1. equals возвращает true
  2. Все публичные свойства также Stable

Пример:

@Stable
data class User(val name: String, val age: Int)

@Composable
fun UserProfile(user: User) {
    // Рекомпозиция произойдет только если user.name или user.age изменятся
    Text(text = "${user.name} (${user.age})")
}

Если User не помечен как Stable, Compose будет считать его Unstable и может пропускать рекомпозиции даже при реальных изменениях.