Рекомпозиция: объяснение
Узнайте, как Compose обновляет пользовательский интерфейс
«Рекомпозиция: объяснение» — бесплатный урок Android Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Android Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Android Academy содержит 4 уроков всего.
Что такое рекомпозиция?
Рекомпозиция — это повторный запуск Compose-компонуемых функций для обновления пользовательского интерфейса, когда изменяется прочитанное ими состояние. Благодаря этому экран остаётся синхронизированным с данными.
Запускается чтением состояния
Compose отслеживает, какие компонуемые элементы читают какое состояние. Когда значение состояния меняется, на рекомпозицию планируются только компонуемые элементы, которые его читали.
Умная и выборочная рекомпозиция
Рекомпозиция является выборочной: Compose старается повторно запускать как можно меньшую часть интерфейса. Изменение одного состояния не перерисует весь экран — только зависящие от него части.
Пропуск
Если входные данные компонуемого элемента не изменились, Compose может полностью пропустить его повторный запуск. Благодаря этому рекомпозиция остаётся быстрой даже на сложных экранах.
Компонуемые элементы выполняются часто
Поскольку рекомпозиция может происходить часто и в любом порядке, компонуемые элементы должны быть безопасны для повторного запуска. Многократный вызов должен создавать один и тот же интерфейс при одинаковом состоянии.
Избегайте побочных эффектов
Не выполняйте побочные эффекты (сетевые запросы, запись файлов, изменение общих переменных) непосредственно в теле компонуемого элемента. Они могут выполняться при каждой рекомпозиции. Вместо этого используйте состояние и API эффектов.
// BAD: runs on every recomposition
@Composable
fun Bad() {
saveToDatabase()
Text("Hi")
}Независимость от порядка
Нельзя рассчитывать на выполнение компонуемых элементов в определённом порядке или в определённом потоке. Рассматривайте каждый вызов как независимый. Именно эта свобода позволяет Compose столь активно оптимизировать работу.
Чтение и отсутствие чтения
При изменении состояния рекомпозируются только компонуемые элементы, которые его читают. Если Text никогда не читает count, изменение count его не затронет.
@Composable
fun Demo() {
var count by remember { mutableStateOf(0) }
Text("Static") // never recomposes from count
Text("Count: $count") // recomposes when count changes
Button(onClick = { count++ }) { Text("+") }
}Циклы рекомпозиции, которых следует избегать
Запись в состояние во время композиции (не внутри события) может вызвать бесконечный цикл рекомпозиции. Изменяйте состояние только из обратных вызовов, таких как onClick, и никогда не делайте этого напрямую в теле.
Всё происходит автоматически
С Вашей точки зрения рекомпозиция происходит автоматически. Вы объявляете интерфейс как функцию состояния, изменяете состояние в обратных вызовах, а Compose сам повторно запускает нужные компонуемые элементы.
Объединяем всё вместе
Этот счётчик демонстрирует рекомпозицию: нажатие изменяет count, Compose повторно запускает читающий его Text, и появляется новое число.
@Composable
fun Counter() {
var count by remember { mutableStateOf(0) }
Button(onClick = { count++ }) {
Text(text = "Count: $count")
}
}Быстрая проверка
Когда Compose выполняет рекомпозицию компонуемого элемента?
Повторение
Основные сведения о рекомпозиции:
- Изменения состояния вызывают повторный запуск компонуемых элементов, которые это состояние читают.
- Рекомпозиция является выборочной и может пропускать неизменившиеся компонуемые элементы.
- Компонуемые элементы не должны иметь побочных эффектов и должны быть безопасны для повторного запуска в любом порядке.
Часто задаваемые вопросы
Урок «Рекомпозиция: объяснение» бесплатный?
Да — полный текст урока «Рекомпозиция: объяснение» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Android Academy, подпишись на CoddyKit PRO. Курс Android Academy содержит 4 уроков всего.
Чему я научусь в уроке «Рекомпозиция: объяснение»?
Узнайте, как Compose обновляет пользовательский интерфейс Ты практикуешь Android Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Android Academy?
Предыдущий опыт не требуется. Android Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Рекомпозиция: объяснение»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Android Academy?
Да. Каждый урок Android Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Состояние с remember и mutableStateOf
- Рекомпозиция: объяснение
- Подъём состояния
- rememberSaveable