Какие знаешь аннотации для увеличения производительности Composable

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

Ответ

@Composable функции можно оптимизировать с помощью аннотаций:

  1. @Stable – помечает класс или интерфейс как стабильный (все свойства val и equals/hashCode неизменны). Уменьшает рекомпозиции:
@Stable
data class User(val name: String, val age: Int)
  1. @Immutable – строже @Stable: все поля должны быть val и неизменяемые коллекции. Гарантирует, что объект никогда не изменится.

  2. @NonRestartableComposable – отключает автоматический рестарт композиции для функции (используется осторожно).

  3. @ReadOnlyComposable – для функций, которые только читают состояние (не вызывают рекомпозицию при изменении параметров).

  4. @OptIn(ExperimentalComposeApi::class) + remember(key) – ручное управление кэшированием с ключами.

Пример оптимизации:

@Composable
fun UserProfile(user: User) {
    // Пропускает рекомпозицию, если user не изменился
    Text(text = user.name)
}