Вернуться в видеотекуКоротко о видео
Запись стрима в формате Jetpack Compose Battle: интервьюер Алексей Панов и кандидат Никита Куликов разбирают устройство Jetpack Compose — от composable-функций, Composer и композиции до рекомпозиции, стабильности типов, состояния и snapshot-механизма. Во второй части они проводят ревью учебного экрана контактов, находя проблемы с созданием объектов при рекомпозиции, списками, ключами, корутинами, лямбдами, layout и частыми обновлениями scroll state. В финале обсуждаются side effects, жизненный цикл LaunchedEffect, внутренности подписки на State и синхронизация рекомпозиции с кадрами.
Затронутые темы
Что взять на заметку
- Уметь объяснить, почему @Composable-функция вызывается только из composable-контекста: Compose Compiler добавляет служебный контекст Composer и использует его при композиции.
- Подготовить модель фаз Compose: композиция, измерение и layout, затем drawing; отдельно понимать создание начальной композиции через setContent и назначение SubcomposeLayout.
- Разобраться в рекомпозиции: какие параметры считаются изменившимися, как стабильность типов влияет на пропуск работы и почему контракт @Stable/@Immutable нельзя нарушать изменяемыми данными.
- Не считать MutableState атомарным счётчиком: конкурентные операции read-modify-write требуют подходящей синхронизации или атомарных примитивов.
- На ревью Compose-кода проверять объекты и лямбды, создаваемые при рекомпозиции: применять remember там, где это оправдано, и передавать ссылку на метод вместо новой лямбды, если сигнатура позволяет.
- Для длинных списков знать LazyColumn, уникальные стабильные ключи и риск ключа по имени контакта; сортировку не следует без нужды выполнять при каждой рекомпозиции.
- Для часто меняющегося scroll state выводить производное булево состояние через derivedStateOf, а для изменения только фона рассматривать перенос работы в drawBehind, чтобы не затрагивать лишние фазы.