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

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

Ответ

Для выявления падения производительности в Composable функциях можно использовать:

  1. Recomposition counts в Layout Inspector (Android Studio) - показывает количество пересозданий компонента
  2. Modifier.debugInspectorInfo() для проверки лишних рекомпозиций
  3. Профилировщик производительности в Android Studio с включенным трекингом рекомпозиций

Пример проблемного кода:

@Composable
fun BadPerformanceExample(items: List<String>) {
    items.forEach { item ->
        Text(text = item) // Рекомпозиция всего списка при изменении
    }
}

Решение - использовать LazyColumn или key():

@Composable
fun OptimizedExample(items: List<String>) {
    LazyColumn {
        items(items, key = { it }) { item ->
            Text(text = item)
        }
    }
}

Основные причины падения производительности:

  • Чтение состояния не через remember
  • Отсутствие ключей в списках
  • Тяжелые вычисления без remember/derivedStateOf