Перейти к содержанию
Innovialabs

Что такое Jetpack Compose и почему Android переходит на него

Основы3 мин

Коротко

Jetpack Compose — современный декларативный UI-фреймворк Android на Kotlin: вы описываете, как экран выглядит при данном состоянии, а система сама перерисовывает изменившиеся части.

Что такое Jetpack Compose

Jetpack Compose — это набор инструментов Google для построения интерфейсов Android-приложений на Kotlin. Вместо XML-разметки и ручного обновления View вы пишете функции, которые описывают интерфейс по текущему состоянию. Изменилось состояние — Compose сам обновляет нужные элементы экрана.

Google продвигает Compose как рекомендуемый способ создания UI для новых Android-приложений, а новые возможности дизайн-системы Material в первую очередь появляются именно в нём.

Императивный и декларативный подход

В классическом подходе экран описан в XML, а код находит элементы и меняет их вручную: textView.setText(...), button.setVisibility(...). Чем сложнее экран, тем легче забыть обновить какой-то элемент и получить рассинхрон.

В Compose интерфейс — это функция от состояния:

@Composable
fun Counter() {
    var count by remember { mutableStateOf(0) }
    Button(onClick = { count++ }) {
        Text("Нажато: $count")
    }
}

Здесь нет поиска View и ручного обновления текста. Вы меняете count, а Compose перерисовывает кнопку.

XML + ViewJetpack Compose
Где описан UIXML-файлы и кодТолько Kotlin
Обновление экранаВручнуюАвтоматически по состоянию
СпискиRecyclerView + AdapterLazyColumn / LazyRow
Повторное использованиеКастомные View, includeОбычные функции
ПревьюLayout Editor@Preview прямо в коде

Ключевые понятия

  • Composable-функция — функция с аннотацией @Composable, которая описывает часть интерфейса. Экраны собираются из небольших функций, как из конструктора.
  • Состояние (state) — данные, от которых зависит экран. Compose отслеживает чтение состояния и знает, какие части зависят от него.
  • Рекомпозиция — повторный вызов composable-функций, когда их состояние изменилось. Compose старается перезапускать только те функции, которые читают изменённые данные.
  • remember — сохраняет значение между рекомпозициями, чтобы оно не сбрасывалось при каждой перерисовке.
  • Поднятие состояния (state hoisting) — практика выносить состояние наверх, во ViewModel или родительскую функцию, а компоненты делать «глупыми»: они получают данные и сообщают о событиях.

Совместимость со старыми экранами

Compose не требует переписывать приложение целиком. Есть два моста:

  • ComposeView — вставляет Compose-интерфейс внутрь существующего XML-экрана или фрагмента.
  • AndroidView — встраивает классическую View (например, карту или старый кастомный компонент) внутрь Compose.

Благодаря этому миграция идёт постепенно: новые экраны пишутся на Compose, старые переводятся, когда до них доходит очередь.

Что это значит для вашего проекта

Новый проект. Разумно сразу начинать на Compose: меньше кода, быстрее итерации с дизайнерами, проще поддерживать единый стиль. Найти разработчиков с опытом Compose становится всё проще.

Существующий проект на XML. Переписывать всё сразу обычно нецелесообразно. Рабочая стратегия:

  1. Подключить Compose к проекту и настроить общую тему.
  2. Новые экраны и фичи делать на Compose.
  3. Переводить старые экраны, когда их всё равно нужно серьёзно менять.
  4. Сложные и стабильные экраны можно оставить на XML надолго.

Частые ошибки

  • Тяжёлые вычисления внутри composable-функций. Они могут вызываться часто; вычисления выносят во ViewModel или оборачивают в remember.
  • Состояние в каждом компоненте. Без поднятия состояния экран сложно тестировать и отлаживать.
  • Игнорирование стабильности данных. Нестабильные типы могут вызывать лишние рекомпозиции; это видно в инструментах Android Studio.
  • Миграция ради миграции. Переписывание рабочего экрана без бизнес-причины тратит время и добавляет риски.

Частые вопросы

Да. Через ComposeView можно встроить Compose в XML-экран, а через AndroidView — классическую View в Compose. Большинство существующих приложений мигрируют именно так, постепенно.

Поможем с этим

Если хотите не разбираться самим, а получить результат — этим мы занимаемся каждый день.

Обсудить проект

Читайте также

Есть идея или задача? Расскажите нам

Ответим в течение рабочего дня и предложим решение. Консультация бесплатная.