Compose Runtime
androidx.compose.runtime
androidx.compose.runtime.rxjava2
androidx.compose.runtime.rxjava3
androidx.compose.runtime.saveable
androidx.compose.runtime.snapshots
(Документация по API для всех пакетов Compose)
| Последнее обновление | Основная версия | Release Candidate | Бета-версия | Альфа-версия |
|---|---|---|---|---|
| 7 октября 2026 г. | 1.12.1 | - | 1.13.0-beta01 | - |
Структура
Compose – это сочетание семи идентификаторов группы Maven в androidx. Каждая группа содержит определенный набор функций, для которых есть отдельные примечания к выпуску.
В таблице ниже перечислены группы и ссылки на примечания к каждому выпуску.
| Группа | Описание |
|---|---|
| compose.animation | Создавать анимацию в приложениях Jetpack Compose, чтобы повышать удобство для пользователей. |
| compose.compiler | Преобразуйте функции @Composable и включите оптимизацию с помощью плагина компилятора Kotlin. |
| compose.foundation | Создавайте приложения Jetpack Compose с помощью готовых блоков и расширяйте их, чтобы создавать собственные элементы системы проектирования. |
| compose.material | Создавайте интерфейсы Jetpack Compose с помощью готовых компонентов Material Design. Это точка входа более высокого уровня для Compose, предназначенная для предоставления компонентов, соответствующих описанным на сайте www.material.io. |
| compose.material3 | Создавайте интерфейсы Jetpack Compose с помощью компонентов Material Design 3 – следующего поколения Material Design. Material 3 включает обновленные темы и компоненты, а также функции персонализации Material You, такие как динамические цвета. Он разработан с учетом нового визуального стиля Android 12 и системного интерфейса. |
| compose.runtime | Основные строительные блоки модели программирования и управления состоянием Compose, а также основная среда выполнения для плагина компилятора Compose. |
| compose.ui | Основные компоненты Compose UI, необходимые для взаимодействия с устройством, в том числе макет, отрисовка и ввод. |
Как объявлять зависимости
Чтобы добавить зависимость от Compose, необходимо добавить в проект репозиторий Maven от Google. Подробная информация приведена в репозитории Google Maven.
Добавьте в файл build.gradle приложения или модуля зависимости для нужных артефактов:
Яркий
plugins { id 'org.jetbrains.kotlin.plugin.compose' } dependencies { implementation "androidx.compose.runtime:runtime:1.12.1" implementation "androidx.compose.runtime:runtime-livedata:1.12.1" implementation "androidx.compose.runtime:runtime-rxjava2:1.12.1" } android { buildFeatures { compose true } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
plugins { kotlin("plugin.compose") } dependencies { implementation("androidx.compose.runtime:runtime:1.12.1") implementation("androidx.compose.runtime:runtime-livedata:1.12.1") implementation("androidx.compose.runtime:runtime-rxjava2:1.12.1") } android { buildFeatures { compose = true } kotlinOptions { jvmTarget = "1.8" } }
Подробнее о зависимостях приведено в статье Добавление зависимостей сборки.
Отзыв
Ваши отзывы помогают нам улучшать Jetpack. Если вы обнаружите проблемы или решите что-то предложить, отправьте отзыв. Прежде чем создавать новую проблему, ознакомьтесь с существующими. Вы можете добавить свой голос к существующей проблеме, нажав на значок звездочки.
Дополнительную информацию можно найти в документации по системе отслеживания ошибок.
Версия 1.13
Версия 1.13.0-beta01
7 октября 2026 г.
Выход androidx.compose.runtime:runtime-*:1.13.0-beta01. Версия 1.13.0-beta01 содержит эти коммиты.
Изменения в API
- Теперь библиотеки предназначены для Kotlin 2.2 и требуют kotlinc 2.2 (I82396, b/498369605).
Исправление ошибок
- Исправлена ошибка, из-за которой передача
Float.NaNилиDouble.NaNв функцию@Composableне позволяла этой функции пропускать повторное создание, даже если все аргументы не менялись. Эта ошибка повлияла на функции, которые получалиDp.Unspecified, посколькуDp.UnspecifiedподдерживаетсяFloat.NaN. (I7a643, b/564569402) - Теперь
CompositionObserverразрешается один раз за проход композиции. Если задать или заменить его наsetObserverво время создания композиции, изменение вступит в силу со следующего прохода. При вставке перемещаемого контента теперь также регистрируются значенияonBeginCompositionиonEndComposition. (Iad280) - Блок вычислений в
computedStateOfтеперь доступен только для чтения. При попытке записи в состояние внутри этого блока будет сгенерирована ошибкаIllegalStateException. (Id045f, b/456249371) - Устранена утечка памяти в
LinkComposer, из-за которой при перемещенииmovableContentсохранялись слоты группы-обертки. (I17af2) - Зависимость
androidx.lifecycle:lifecycle-runtimeбыла обновлена до версии 2.10.0. Эта версия необходима для выполнения встроенных проверок lint времени выполнения жизненного цикла с AGP версии 9.5.0-alpha04 или более поздней. (I99bfd, b/556807521) - Поддержка использования
ComposeTracerвне основного потока. (I139e4)
Внешний вклад
- Исправлена ошибка в
computedStateOf, которая могла приводить к неожиданным недействительным значениям при чтении с помощьюSnapshotStateObserver. (Ie3f8b, b/561372470)
Версия 1.13.0-alpha03
9 сентября 2026 г.
Выход androidx.compose.runtime:runtime-*:1.13.0-alpha03. Версия 1.13.0-alpha03 содержит эти коммиты.
Эффективность
- Встраивание
SlotWriter.forAllDataInRememberOrderдля устранения выделений (Ie39f6)
Версия 1.13.0-alpha02
26 августа 2026 г.
Выход androidx.compose.runtime:runtime-*:1.13.0-alpha02. Версия 1.13.0-alpha02 содержит эти коммиты.
Изменения в API
- Добавлен код
withLocalRetainedValuesStore, который позволяет возвращать значения из лямбда-функции контента. (I8e871, b/542168593) - Добавлены перегрузки, допускающие значение NULL, для
rememberSerializableвMutableState. (I77b83, b/543285462)
Версия 1.13.0-alpha01
12 августа 2026 г.
Выход androidx.compose.runtime:runtime-*:1.13.0-alpha01. Версия 1.13.0-alpha01 содержит эти коммиты.
Изменения в API
Мы изменили флаг функции
LinkTable, чтобы уменьшить конфликты в объединенных наборах правил ProGuard и повысить совместимость, когда приложение сжимается вне Gradle. Синтаксис ProGuard, используемый для настройки флага, немного изменился. Обратите внимание на добавленные скобки (I419da):-assumevalues public class androidx.compose.runtime.ComposeRuntimeFlags { static boolean isLinkBufferComposerEnabled() return true; }Теперь функции
produceState()иFlow.collectAsState()принимают аргументSnapshotMutationPolicy, чтобы управлять правилами равенства и объединения для базового объектаState. (I0c167, b/405128869)Сделано так, чтобы
@ComposableTargetможно было повторять. Дополнительную информацию можно найти в обновленной документации. (I99a89, b/481422057)Добавлен
RecompositionTracerдля записи потока аннулирования рекомпозиции (I1dbc1, Ia991d, b/531813367)Добавлен наблюдаемый объект
keysвSaveableStateHolder, чтобы упростить управление навигацией и состоянием стека возврата и устранить необходимость во внешнем отслеживанииkey. Доступ черезholder.keys; удаление черезremoveState. (I9bbbb, b/398887924)Добавлен тег
staticCompositionLocalWithComputedDefaultOfдля создания теговProvidableCompositionLocals, которые при наличии данных действуют как статические, а при отсутствии – вычисляются. (I844e4)
Исправление ошибок
- Исправлена ошибка в
GapComposer, из-за которой экземплярыRememberObserverпосле блокаwithCompositionLocalмогли неправильно выполнять обратные вызовы forget доRememberObserverв блоке. (I4d54c) - Исправлена ошибка, возникавшая при записи в изменяемый объект состояния. (I48194, b/503110696)
- Исправлена ошибка в
SnapshotStateSet.writeToParcel, из-за которой сериализовалась только первая запись. (I64f4c, b/537461421) - Символы
CancellationException, которые используются для отменыLaunchedEffectи запоминанияCoroutineScopes, были изменены для большей ясности при появлении в трассировках стека. (I89840, b/449897855) - Оптимизирована инициализация сопутствующих объектов классов значений
compose:runtime(ComposeStackTraceMode,GroupKind) с помощью динамических методов получения. (I50640) - Удаление требования для
compileSdk37 (If78b4)
Внешний вклад
- Исправлена ошибка, из-за которой родительские композиции переставали отвечать на запросы при удалении дочерней композиции с ошибкой во время редактирования в реальном времени. (I3717c)
- Исправлено восстановление функции "Прямое редактирование" после ошибки в дочерней композиции, чтобы родительские композиции продолжали отслеживать изменения состояния. (I63fb5)
Версия 1.12
Версия 1.12.1
9 сентября 2026 г.
androidx.compose.runtime:runtime-*:1.12.1 не содержит изменений по сравнению с версией 1.12.0. Версия 1.12.1 содержит эти коммиты.
Версия 1.12.0
12 августа 2026 г.
Выход androidx.compose.runtime:runtime-*:1.12.0. Версия 1.12.0 содержит эти коммиты.
Важные изменения с версии 1.11.0
Изменения в таблице экспериментальных слотов
- Мы улучшили экспериментальную реализацию
LinkTable, представленную в версии 1.11. Новая реализация предназначена для повышения производительности при рекомпозиции, особенно при небольших случайных изменениях. Мы рекомендуем попробовать новую версиюSlotTableи сообщить нам о любых проблемах, с которыми вы столкнетесь. Подробнее:ComposeRuntimeFlags.isLinkBufferComposerEnabled.
Побочный эффект при использовании API ключей
- Добавлен перегруженный оператор
SideEffect, который принимает ключевые аргументы. Новый API позволяет запускать одноразовыеSideEffectбез необходимости использоватьLaunchedEffectилиDisposableEffect, в которых не используются блокиCoroutineScopeилиonDispose. (I528b2, b/476108743)
Версия 1.12.0-rc01
29 июля 2026 г.
Выход androidx.compose.runtime:runtime-*:1.12.0-rc01. Версия 1.12.0-rc01 содержит эти коммиты.
Версия 1.12.0-beta02
1 июля 2026 г.
Выход androidx.compose.runtime:runtime-*:1.12.0-beta02. Версия 1.12.0-beta02 содержит эти коммиты.
Исправление ошибок
- Исправлена ошибка
ArrayIndexOutOfBoundsExceptionвLinkComposerпри использовании вложенныхMovableContent. (I85daf)
Версия 1.12.0-beta01
17 июня 2026 г.
Выход androidx.compose.runtime:runtime-*:1.12.0-beta01. Версия 1.12.0-beta01 содержит эти коммиты.
Исправление ошибок
- Исправлена ошибка, из-за которой наблюдатели применения снимков не получали уведомления, если объект состояния был создан в одном снимке, а затем изменен в параллельном снимке до применения первого. (Ide27f, b/451479063)
- Устранена возможная утечка памяти при отслеживании значений
derivedStateOf()в композиции. Пересылка записей в объекты, прочитанные производным состоянием, привела к тому, что экземплярderivedStateOf()сохранялся в композиции до тех пор, пока она не была удалена. ЕслиderivedStateOf()не запоминается правильно, утечка может быть значительной, поскольку при каждой композиции может создаваться новый. (Ib5d87, b/516904513) - Исправлена проблема в
LinkComposer, из-за которой при аннулировании во время композиции пропускались композиции, а не выполнялись повторно. (Ie29fe) - Исправлена проблема с перегрузкой vararg функции
remember, из-за которой запомненное значение не становилось недействительным и функция remember возвращала неверное значение. Это произошло, когдаrememberбыл перекомпонован с меньшим количеством ключей, которые совпадают с предыдущими ключами, за исключением элементов из конца массива. Чтобы исправление вступило в силу, нужно перекомпилировать затронутый код. (I0736b)
Внешний вклад
- Добавлена подробная трассировка для
DisposableEffectиSideEffectв среде выполнения Compose. (Ie451f)
Версия 1.12.0-alpha03
19 мая 2026 г.
Выход androidx.compose.runtime:runtime-*:1.12.0-alpha03. Версия 1.12.0-alpha03 содержит эти коммиты.
Исправление ошибок
- Устранены проблемы в
LinkTable, из-за которых диагностические трассировки стека были пустыми или содержали неполную информацию (I3918c). - Исправлена проблема с внутренним типом данных, из-за которой в редких случаях при работе с перемещаемым контентом могло возникать исключение. (Ic478f, b/507724717)
- Исправлена проблема с пропуском тестов в группе
LinkComposer, из-за которой поведение было непоследовательным по сравнению с группойGapComposer, неожиданно пересчитывались аргументы по умолчанию и истекало время ожидания тестов. (I783dc)
Версия 1.12.0-alpha02
6 мая 2026 г.
Выход androidx.compose.runtime:runtime-*:1.12.0-alpha02. Версия 1.12.0-alpha02 содержит эти коммиты.
Изменения в API
- Добавлен перегруженный оператор
SideEffect, который принимает ключевые аргументы. Новый API позволяет запускать одноразовыеSideEffectsбез необходимости использоватьLaunchedEffectилиDisposableEffect, в которых не используются блокиCoroutineScopeилиonDispose. (I528b2, b/476108743)
Версия 1.12.0-alpha01
22 апреля 2026 г.
Выход androidx.compose.runtime:runtime-*:1.12.0-alpha01. Версия 1.12.0-alpha01 содержит эти коммиты.
Исправление ошибок
- Исправлена проблема в LinkTable, которая могла приводить к недопустимым операциям с узлами. (I491c3)
- Обновлена версия compileSdk для Compose до API 37. Это означает, что при использовании Compose требуется минимальная версия AGP 9.2.0. (Id45cd, b/413674743)
- Исправлена проблема с кешированием в LinkTable, из-за которой вставки контента, вызывающие изменение размера, могли приводить к чтению устаревших значений, что могло препятствовать разрешению CompositionLocals. (I8016c)
- Исправлена ошибка, из-за которой
T.writableRecordвыдавал ненужныеIllegalStateException(Ia778f, b/440975176).
Версия 1.7 трассировки среды выполнения
Версия 1.7.0-rc01
18 сентября 2024 г.
Выход androidx.compose.runtime:runtime-tracing:1.7.0-rc01. Версия 1.7.0-rc01 содержит эти коммиты.
Трассировка среды выполнения версии 1.0
Версия 1.0.0-beta01
29 ноября 2023 г.
Выход androidx.compose.runtime:runtime-tracing:1.0.0-beta01. Версия 1.0.0-beta01 содержит следующие коммиты:
Версия 1.0.0-alpha05
15 ноября 2023 г.
Выход androidx.compose.runtime:runtime-tracing:1.0.0-alpha05. Версия 1.0.0-alpha05 содержит следующие коммиты:
Исправление ошибок
- Закреплены зависимости на самых низких поддерживаемых стабильных версиях (например, compose-runtime и tracing-perfetto). Это исправляет проблему, из-за которой compose-runtime-tracing добавлял в приложение более новую версию compose-runtime.
Версия 1.0.0-alpha04
23 августа 2023 г.
Выход androidx.compose.runtime:runtime-tracing:1.0.0-alpha04. Версия 1.0.0-alpha04 содержит следующие коммиты:
Новые функции
- Совместимость с последними версиями Benchmark и Tracing Perfetto, поддержка отслеживания композиции при запуске приложения (холодный запуск), например в AndroidX Benchmark и Android Studio (начиная с Hedgehog Beta 2).
Изменения в API
- Название "
androidx.tracing.perfetto.Trace" изменено на "androidx.tracing.perfetto.PerfettoSdkTrace". (I44af8) - Приведение API Tracing Perfetto SDK в соответствие с
android.os.Trace. (I73ba0, b/282199917) - Предварительные условия для трассировки при запуске приложения. (Iad890)
- Объединены файлы экспериментального и общедоступного API (I0f2e1, b/278769092)
Версия 1.0.0-alpha02
8 февраля 2023 г.
Выход androidx.compose.runtime:runtime-tracing:1.0.0-alpha02. Версия 1.0.0-alpha02 содержит следующие коммиты:
Новые функции
- Функциональность не изменилась. Множество оптимизаций производительности в зависимостях более низкого уровня
androidx.tracing:tracing-perfetto*.
Версия 1.0.0-alpha01
7 сентября 2022 г.
Выход androidx.compose.runtime:runtime-tracing:1.0.0-alpha01. Версия 1.0.0-alpha01 содержит следующие коммиты:
Новые функции
androidx.compose.runtime:runtime-tracing– это библиотека, которая при наличии поддерживающих ее инструментов (скоро появятся) позволяет расширить трассировку в приложении Compose. Первая версия библиотеки – 1.0.0-alpha01.
Версия 1.11
Версия 1.11.4
1 июля 2026 г.
Выход androidx.compose.runtime:runtime-*:1.11.4. Версия 1.11.4 содержит эти коммиты.
Версия 1.11.3
17 июня 2026 г.
Выход androidx.compose.runtime:runtime-*:1.11.3. Версия 1.11.3 содержит эти коммиты.
Версия 1.11.2
19 мая 2026 г.
Выход androidx.compose.runtime:runtime-*:1.11.2. Версия 1.11.2 содержит эти коммиты.
Исправление ошибок
- Исправлена проблема с внутренним типом данных, из-за которой в редких случаях при работе с перемещаемым контентом могло возникать исключение. (Ic478f, b/507724717)
Версия 1.11.1
6 мая 2026 г.
Выход androidx.compose.runtime:runtime-*:1.11.1. Версия 1.11.1 содержит эти коммиты.
Версия 1.11.0
22 апреля 2026 г.
Выход androidx.compose.runtime:runtime-*:1.11.0. Версия 1.11.0 содержит эти коммиты.
Важные изменения с версии 1.10.0
Новая экспериментальная таблица слотов
- Мы переписали
SlotTable– внутреннюю структуру данных, используемую средой выполнения Compose для отслеживания иерархии композиции, определения изменений, вызванных повторной композицией, и хранения запомненных значений. Переписанный код позволяет повысить производительность при рекомпозиции, в первую очередь за счет того, что в нем используется значительно меньше операций копирования памяти, чем в буфереSlotTable. Некоторые изменения в иерархии композиции, например переупорядочивание длинного списка объектов, могут выполняться более чем в два раза быстрее, чем в предыдущей версииSlotTable. Большинство других операций выполняются на 10% быстрее при использовании новой реализацииSlotTable. РеализацияSlotTable, используемая во время выполнения, влияет на все методы Composable и не требует перекомпиляции. Использование новой версииSlotTable– это изменение на уровне всего приложения, в том числе его зависимостей. - Эта реализация
SlotTableпока экспериментальная и по умолчанию отключена. Его можно включить, задав для свойстваComposeRuntimeFlags.isLinkBufferComposerEnabledзначениеtrue. В релизных сборках с включенным уменьшением размера этот параметр по умолчанию имеет значение false в файле proguard-rules.pro, поставляемом вместе со средой выполнения. Чтобы включить новыйSlotTableв производственной среде, это предположение нужно изменить на true в файлеproguard-rules.proприложения. Дополнительную информацию можно найти в документации поComposeRuntimeFlags.isLinkBufferComposerEnabled.
Локали, заданные по умолчанию для хоста
- Добавлен тег
compositionLocalWithHostDefaultOf, который позволяет определять CompositionLocals, возвращающиеся к среде размещения (например, тегам AndroidView) для значений по умолчанию.
Более эффективное наблюдение за конверсиями с помощью snapshotFlowSnapshotFlowManager
- Добавлен
SnapshotFlowManagerAPI для более эффективного отслеживанияsnapshotFlow. Повторное использование одного и того жеSnapshotFlowManagerдля нескольких экземпляровsnapshotFlowпозволяет регистрировать меньше наблюдателей за применением моментальных снимков, что ускоряет обработку обновлений состояния.
Версия 1.11.0-rc01
8 апреля 2026 г.
Выход androidx.compose.runtime:runtime-*:1.11.0-rc01. Версия 1.11.0-rc01 содержит эти коммиты.
Версия 1.11.0-beta02
25 марта 2026 г.
Выход androidx.compose.runtime:runtime-*:1.11.0-beta02. Версия 1.11.0-beta02 содержит эти коммиты.
Исправление ошибок
- Исправлена ошибка в WASM, из-за которой хеш-коды идентификаторов всегда возвращали значение 0 (I9d70c).
- Исправлена проблема, из-за которой родительское производное состояние могло неправильно становиться недействительным при изменении зависимостей вложенного производного состояния (Ia7981, b/481750019).
- Устранена проблема в
LinkTable, из-за которой после удаления композиции могли выполняться недопустимые операции записи. (I5c97a) - Устранена проблема в
LinkTable, из-за которой при изменении размера таблицы во время операции копирования могли выполняться недопустимые операции записи (Ie7edf). - Исправлена ошибка в
LinkTable, из-за которой неправильно обновлялось сохраненное значение узла (I58a4a). - Теперь
LinkTableинициализируется с меньшей емкостью, что позволяет избежать ошибок нехватки памяти при создании большого количества вложенных композиций на устройствах с небольшим размером кучи (I112b9).
Версия 1.11.0-beta01
11 марта 2026 г.
Выход androidx.compose.runtime:runtime-*:1.11.0-beta01. Версия 1.11.0-beta01 содержит эти коммиты.
Изменения в API
SnapshotFlowManagerи перегрузкаsnapshotFlow, принимающая параметрmanager, теперь помечены как экспериментальные (I5c1a5, b/486077876, I0de71, b/486077876).
Исправление ошибок
- Исправлена ошибка "Функция Apply вызывается для деактивированного узла" при сбое в композиции с возможностью приостановки (I880c0, b/484300733).
- Исправлена ошибка в
LinkTable, из-за которой при использованииMovableContentмогли повреждатьсяArrayIndexOutOfBoundsExceptionsили метаданные. (I8452b) - Исправлена проблема в
LinkTable, из-за которой диагностические трассировки заполнялись неправильно (I59868). - Исправлена проблема в новой таблице слотов, из-за которой
RememberObservers, используемый вMovableContent, мог вызывать циклOutOfMemoryError/infiniteпри удалении. (I884e7)
Версия 1.11.0-alpha06
25 февраля 2026 г.
Выход androidx.compose.runtime:runtime-*:1.11.0-alpha06. Версия 1.11.0-alpha06 содержит эти коммиты.
Версия 1.11.0-alpha05
11 февраля 2026 г.
Выход androidx.compose.runtime:runtime-*:1.11.0-alpha05. Версия 1.11.0-alpha05 содержит эти коммиты.
Изменения в API
ComposeRuntimeFlags.isMovingNestedMovableContentEnabled, флаг функции времени выполнения, был удален. (I3ee62, b/455588848)- Объект "
HostDefaultKey" преобразован изopen classвinterface. Это позволяет ключам реализовывать несколько механизмов поиска (например,ViewTreeHostDefaultKey), не ограничиваясь наследованием одного класса, что повышает расширяемость для пользовательских сред размещения. (I917a2) HostDefaultProviderиLocalHostDefaultProviderтеперь называютсяpublic. Это позволяет задавать значения для локалей, относящихся к определенным платформам, в пользовательских средах размещения. (I5bdbe)
Исправление ошибок
- Устранена возможность взаимной блокировки при одновременном выполнении двух функций
snapshotFlowв двух потоках. (Ib4339) - Исправлена ошибка в таблице ссылок, из-за которой инструменты могли пропускать композиции в иерархии и неправильно связывать подкомпозиции (I7178e).
Внешний вклад
- Исправлена ложноположительная ошибка Lint при использовании унарного оператора для изменения значения в блоке produceState (I1c7c9).
Версия 1.11.0-alpha04
28 января 2026 г.
Выход androidx.compose.runtime:runtime-*:1.11.0-alpha04. Версия 1.11.0-alpha04 содержит эти коммиты.
Изменения в API.
- Мы переписали
SlotTable– внутреннюю структуру данных, используемую средой выполнения Compose для отслеживания иерархии композиции, определения изменений, вызванных повторной композицией, и хранения запомненных значений. Переписанный код позволяет повысить производительность при рекомпозиции, в первую очередь за счет того, что в нем используется значительно меньше операций копирования памяти, чем в буфереSlotTable. Некоторые изменения в иерархии композиции, например переупорядочивание длинного списка объектов, могут выполняться более чем в два раза быстрее, чем в предыдущей версииSlotTable. Большинство других операций выполняются на 10% быстрее при использовании новой реализацииSlotTable. РеализацияSlotTable, используемая во время выполнения, влияет на все методы Composable и не требует перекомпиляции. Использование новой версииSlotTable– это изменение на уровне всего приложения, в том числе его зависимостей. - В настоящее время реализация
SlotTableотключена по умолчанию. Чтобы включить ее, задайте для параметраComposeRuntimeFlags.isLinkBufferComposerEnabledзначениеtrue. - В релизных сборках с включенным уменьшением размера предполагается, что это значение равно
falseв файлеproguard-rules.proпо умолчанию, поставляемом со средой выполнения. Чтобы включить новую функциюSlotTableв производственной среде, необходимо изменить предположение наtrueв файлеproguard-rules.proприложения. Дополнительную информацию можно найти в документации поComposeRuntimeFlags.isLinkBufferComposerEnabled. (Ib741d, b/268366116)
Новые функции
- Добавлен тег
compositionLocalWithHostDefaultOf, который позволяет определятьCompositionLocals, возвращающиеся к среде размещения (например, тегам представлений Android) для получения значений по умолчанию. (I15b81)
Исправление ошибок
- Убедитесь, что вызовы
Snapshot.sendApplyNotificationsне возвращаются, пока не будут отправлены необходимые уведомления о применении. (I95f20, b/418800424) - Предотвращает понижение уровня стека вызовов исходной информации до ключей группы в случаях, когда исходная информация отсутствует во время выполнения. (If3712)
- Представляем
ComposeToolingFlags. Эти флаги предназначены для постоянного использования (в отличие отComposeRuntimeFlags) и применяются для функций инструментов, которые оказывают значительное влияние на производительность. (I87863)
Внешний вклад
- Новый экспериментальный API
RecomposerInfo#errorState(I0decc) - Измените
AnnotationRetentionаннотацииFunctionKeyMetaна BINARY (I53495).
Версия 1.11.0-alpha03
14 января 2026 г.
Выход androidx.compose.runtime:runtime-*:1.11.0-alpha03. Версия 1.11.0-alpha03 содержит эти коммиты.
Изменения в API
- Добавлен класс
SnapshotFlowManagerи необязательный параметрSnapshotFlowManagerвsnapshotFlow, чтобы пользователи могли оптимизировать количество зарегистрированных наблюдателей применения снимков. (I6289b, b/446746211)
Исправление ошибок
- Добавлена аннотация трассировки для вставки перемещаемого контента (Ibf176).
Версия 1.11.0-alpha02
17 декабря 2025 г.
Выход androidx.compose.runtime:runtime-*:1.11.0-alpha02. Версия 1.11.0-alpha02 содержит эти коммиты.
Изменения в API
- Удален флаг
isMovableContentUsageTrackingEnabled(I71e2b, b/427960130).
Внешний вклад
- Исправлена ошибка, из-за которой функция "Изменения в реальном времени" не восстанавливалась после ошибки. (Ieb34f)
Версия 1.11.0-alpha01
3 декабря 2025 г.
Выход androidx.compose.runtime:runtime-*:1.11.0-alpha01. Версия 1.11.0-alpha01 содержит эти коммиты.
Изменения в API
RetainedValuesStore.getExitedValueOrDefaultпереименован вconsumeExitedValueOrDefaultc7a0929- Удален экспериментальный API параллельной перекомпоновки.(c8af15d)
Версия 1.10
Версия 1.10.6
25 марта 2026 г.
Выход androidx.compose.runtime:runtime-*:1.10.6. Версия 1.10.6 содержит эти коммиты.
Исправление ошибок
- Исправлен сбой "Невозможно отключить повторное использование из корневого каталога, если оно было вызвано другими группами" в композиции с возможностью приостановки (I474b5, b/488433633)
- Исправлена ошибка "Функция Apply вызывается для деактивированного узла" при сбое в композиции с возможностью приостановки (I880c0, b/484300733).
Версия 1.10.5
11 марта 2026 г.
Выход androidx.compose.runtime:runtime-*:1.10.5. Версия 1.10.5 содержит эти коммиты.
Версия 1.10.4
25 февраля 2026 г.
Версия androidx.compose.runtime:runtime-*:1.10.4 выпущена без изменений по сравнению с версией 1.10.3. Версия 1.10.4 содержит эти коммиты.
Версия 1.10.3
11 февраля 2026 г.
Выход androidx.compose.runtime:runtime-*:1.10.3. Версия 1.10.3 содержит эти коммиты.
Версия 1.10.2
28 января 2026 г.
Выход androidx.compose.runtime:runtime-*:1.10.2. Версия 1.10.2 содержит эти коммиты.
Версия 1.10.1
14 января 2026 г.
Выход androidx.compose.runtime:runtime-*:1.10.1. Версия 1.10.1 содержит эти коммиты.
Версия 1.10.0
3 декабря 2025 г.
Выход androidx.compose.runtime:runtime-*:1.10.0. Версия 1.10.0 содержит эти коммиты.
Версия 1.10.0-rc01
19 ноября 2025 г.
Выход androidx.compose.runtime:runtime-*:1.10.0-rc01. Версия 1.10.0-rc01 содержит эти коммиты.
Исправление ошибок
- Защита от повторного входа при записи производных состояний в
SnapshotStateObserver(I7b862, b/435655844, b/456249373, b/402535073) - [Lint] Исправлена незначительная ошибка, из-за которой детектор неправильно предупреждал о составном присваивании. (I08319, b/456775556)
Версия 1.10.0-beta02
5 ноября 2025 г.
Выход androidx.compose.runtime:runtime-*:1.10.0-beta02. Версия 1.10.0-beta02 содержит эти коммиты.
Изменения в API
Мы внесли в
RetainedValuesStoreряд изменений, несовместимых с API, чтобы упростить установку и управление. Существующие звонки на номераretainиRetainedEffectне будут затронуты, но для совместимости с этой версией потребуется перенести все специальные номераRetainedValuesStore. (If3c2f, b/451921682, b/450539803)RetainedValuesStoreбольше не предоставляет API низкого уровня для запуска и остановки хранения. Теперь статус хранения автоматически следует за контентом.LocalRetainedValuesStoreProviderпредлагает установитьRetainedValuesStore.LocalRetainedValuesStoreне следует предоставлять напрямую. Подробнее об этих изменениях можно узнать из обновленной документации и примеров.RetainedValuesStoreProviderпереименован вRetainedValuesStoreRegistry. Теперь этот класс предоставляет только API для установки и управленияRetainedValuesStoreв композиции.ControlledRetainedValuesStoreзаменено наManagedRetainedValuesStore.RetainedValuesStoreтеперь интерфейс.
Раньше установка специального значка RetainedValuesStore могла выглядеть так:
val retainedValuesStore = retainControlledRetainedValuesStore()
if (active) {
CompositionLocalProvider(LocalRetainedValuesStore provides retainedValuesStore) {
content()
}
val composer = currentComposer
DisposableEffect(retainedValuesStore) {
val cancellationHandle =
if (retainedValuesStore.retainExitedValuesRequestsFromSelf > 0) {
composer.scheduleFrameEndCallback {
retainedValuesStore.stopRetainingExitedValues()
}
} else {
null
}
onDispose {
cancellationHandle?.cancel()
retainedValuesStore.startRetainingExitedValues()
}
}
}
После изменений в API установку можно будет описать следующим кодом:
val retainedValuesStore = retainManagedRetainedValuesStore()
if (active) {
LocalRetainedValuesStoreProvider(retainedValuesStore) {
content()
}
}
Исправление ошибок
- Переносит недействительность области действия в перемещаемый контент перед тем, как переместить этот контент из таблицы слотов (I9d123, b/451651649).
Версия 1.10.0-beta01
22 октября 2025 г.
Выход androidx.compose.runtime:runtime-*:1.10.0-beta01. Версия 1.10.0-beta01 содержит эти коммиты.
Изменения в API
RetainedValuesStore.getExitedValueOrDefaultпереименован вRetainedValuesStore.getExitedValueOrElse(If9653, b/452340613)isKeepingExitedValuesпереименован вisRetainingExitedValues(I660bf, b/437095756)- Сервисный аккаунт
RetainScopeпереименован. Новое название:RetainedValuesStore. ВместоRetainScopeHolderтеперь используетсяRetainedValuesStoreRegistry. ВместоRetainScopeHolder.RetainScopeProviderтеперь используетсяRetainedValuesStoreRegistry.ProvideChildRetainedValuesStore. (Idf23a, b/437095756)
Исправление ошибок
- Отложенная инициализация
SavedStateвSaveableStateRegistryдо первого использования. (Ic0a93)
Версия 1.10.0-alpha05
8 октября 2025 г.
Выход androidx.compose.runtime:runtime-*:1.10.0-alpha05. Версия 1.10.0-alpha05 содержит эти коммиты.
Исправление ошибок
- Заполните трассировку стека для
DiagnosticComposeExceptionв режиме выпуска. (Ib76cb) - Исправлена ошибка в состоянии Snapshot, из-за которой при использовании правила объединения для типа предыдущее значение могло быть вычислено неправильно, в результате чего возвращалось будущее значение состояния вместо предыдущего. Это происходит, если в очереди более двух изменяемых снимков и хотя бы одно из применяемых значений имеет правила объединения. (I527b5, b/442791065)
Версия 1.10.0-alpha04
24 сентября 2025 г.
Выход androidx.compose.runtime:runtime-*:1.10.0-alpha04. Версия 1.10.0-alpha04 содержит эти коммиты.
Изменения в API
- Добавлен API
RetainScopeHolderдля управления коллекциейRetainScopes. Это можно использовать для реализации удержания для контейнеров и хостов навигации, которые состоят из множества дочерних элементов с разными сроками хранения. (I10e0f) - Добавлены API
RetainedContentHostиretainControlledRetainScope, которые можно использовать для создания автоматически управляемыхRetainScopesдля исчезающего контента, например сворачиваемых панелей (If81f6). - Устаревший встроенный перегруженный оператор
Updater#setудален, так как он слишком часто упаковывал предоставленное значение. Добавлена перегрузкаUpdater#init, которая принимает параметр, позволяющий избежать использования лямбда-выражения. (Id679e) - Добавлен API
RetainedEffect, побочный эффект которого аналогиченDisposableEffect, но он следует жизненному циклу хранения, а не жизненному циклу композиции. Этот API предназначен для эффектов, связанных с сохранением другого объекта, который не реализует или не может реализоватьRetainObserver. (I1c61f, b/177562901) - Исправлена документация по
RetainObserver.onRetainedи добавленRetainObserver.onUnused, который является аналогомRememberObserver.onAbandoned(Ia6fc5).
Исправление ошибок
- Исправлена ошибка, из-за которой диспетчеризация запоминалась после первой группы в функции (например, в вызываемом компоненте) и перед группой, которую можно удалить (например, оператором
if), что могло привести к неправильному порядку диспетчеризацииonForgotten. (I453f6, b/346821372) - При инициализации
LaunchedEffectне переходите по контексту сопрограммы. (I8d2c3b)
Версия 1.10.0-alpha03
10 сентября 2025 г.
Выход androidx.compose.runtime:runtime-*:1.10.0-alpha03. Версия 1.10.0-alpha03 содержит эти коммиты.
Изменения в API
- Добавлены трассировки стека Compose на основе ключей групп, которые работают в минимизированных приложениях. Сопоставление ProGuard для этих трассировок будет генерироваться плагином Gradle компилятора Compose, начиная с Kotlin 2.3.0. По умолчанию они отключены. Чтобы включить их, используйте метод
ComposeStackTraceMode.GroupKeys. (Ifbcb5) - Добавлен интерфейс:
IdentifiableRecomposeScopeдля инструментов (Idd5e0, b/434194620) - Устранены ненужные аннулирования в композициях с
CompositionLocalContext(I3fa21, b/412750209).
Исправление ошибок
- В документации и инструментах теперь указано, что ключи, переданные для сохранения, также сохраняются. Не передавайте ключи для сохранения, так как это приведет к утечке памяти. (Ib553b, b/177562901)
- Исправлена проблема, из-за которой при вызове функции
resume()приостановленной композиции в другом потоке состояние ожидающих уведомлений могло быть неверным, когда основной поток пытался перекомпоновать приостановленную композицию для следующего кадра. (Ie5f17, b/442649894) - Регистрировать исключения, обнаруженные при создании композиции. (I47d78, b/432799675, b/436878515, b/359623674, b/400436355)
Версия 1.10.0-alpha02
27 августа 2025 года
Выход androidx.compose.runtime:runtime-*:1.10.0-alpha02. Версия 1.10.0-alpha02 содержит эти коммиты.
Изменения в API
- Добавлен атрибут
@DoNotRetain, который можно использовать для аннотирования типов, которые не следует использовать с APIretain, возможно, потому что они могут привести к утечке ресурсов. (Ie5435) - Для проектов, выпущенных с Kotlin 2.0, требуется KGP 2.0.0 или более поздней версии. (Idb6b5)
Исправление ошибок
- Исправлена ошибка, из-за которой при изменении корневого узла композиции подвижный контент неправильно вычислял операции для Applier. При вычислении изменений для перемещаемого контента вызов
up()может остаться в ожидании и не быть отправлен приложению, в результате чего состояние приложения будет неправильно определено для последующего использования. (I7c583), (I47b70) - Помечает
CheckResultкак устаревший, поскольку он не предназначен для использования. (I32934)
Версия 1.10.0-alpha01
13 августа 2025 г.
Выход androidx.compose.runtime:runtime-*:1.10.0-alpha01. Версия 1.10.0-alpha01 содержит эти коммиты.
Изменения в API
- Добавлен API для хранения данных. Как и
rememberSaveable, retain может сохранять значения, которые выходят за пределы иерархии композиции. Сохраненные значения не сериализуются и имеют более короткий срок жизни, чем сохраненные значения. Они работают аналогичноViewModelиз androidx. Подробная информация приведена в документации. (Ia3105, b/177562901) - Добавлен API
awaitOrScheduleNextCompositionEnd(), который вызывает функцию обратного вызова, когда Recomposer завершает создание текущего кадра. Если Recomposer в данный момент не создает кадр, этот API приостанавливает работу до тех пор, пока не будет создан следующий кадр, а затем планирует создание нового кадра. (Ib873c) - Добавлен локальный API для поставщика композиций, возвращающий неединичные значения (I22521, b/271871288)
- Добавлен флаг функции
isMovableContentUsageTrackingEnabled, который позволяет отслеживать использование перемещаемого контента, чтобы избежать некоторых издержек при его первоначальном создании. Сейчас эта функция по умолчанию отключена. (Ia713d)
Исправление ошибок
- Исправлена ошибка, из-за которой происходил сбой при перемещении контента между вложенными композициями. (I3fa1e, b/436858107)
- Исправлена ошибка, из-за которой часть трассировки стека composable-функции отсутствовала при использовании нескольких вложенных подкомпозиций. (I98c6f)
- Перенос значения minSdk по умолчанию с API 21 на API 23 (Ibdfca, b/380448311, b/435705964, b/435705223)
- Исправлена проблема, из-за которой при обновлении внутреннего состояния композиции, которую можно приостановить, из нескольких потоков возникала гонка данных. (I03895)
- Обновление наблюдателя регистрации композиции, чтобы он вызывался до начальной композиции. (I4adca, b/430600932)
- Исправлена незначительная ошибка, из-за которой
AutoboxingStateValuePropertyDetectorне был совместим с K1 и K2. (Ie81c1)
Внешний вклад
- Сделайте артефакт runtime-rxjava2 мультиплатформенным и добавьте JVM в качестве поддерживаемой цели. (I5409e)
- Сделайте артефакт runtime-rxjava3 мультиплатформенным и добавьте JVM в качестве поддерживаемой цели. (I97e84)
Версия 1.9
Версия 1.9.5
19 ноября 2025 г.
Выход androidx.compose.runtime:runtime-*:1.9.5. Версия 1.9.5 содержит эти коммиты.
Исправление ошибок
- Переносит недействительность области действия в перемещаемый контент перед тем, как переместить этот контент из таблицы слотов (I9d123, b/451651649).
Версия 1.9.4
22 октября 2025 г.
Выход androidx.compose.runtime:runtime-*:1.9.4. Версия 1.9.4 содержит эти коммиты.
Версия 1.9.3
8 октября 2025 г.
Выход androidx.compose.runtime:runtime-*:1.9.3. Версия 1.9.3 содержит эти коммиты.
Версия 1.9.2
24 сентября 2025 г.
Выход androidx.compose.runtime:runtime-*:1.9.2. Версия 1.9.2 содержит эти коммиты.
Версия 1.9.1
10 сентября 2025 г.
Выход androidx.compose.runtime:runtime-*:1.9.1. Версия 1.9.1 содержит эти коммиты.
Исправление ошибок
- Не пытайтесь перекомпоновать композиции, которые находятся в процессе создания. (Iacb01)
- Не допускать двойной приостановки областей перекомпоновки. (I060b2, b/431584881)
Версия 1.9.0
13 августа 2025 г.
Выход androidx.compose.runtime:runtime-*:1.9.0. Версия 1.9.0 содержит эти коммиты.
Важные изменения с версии 1.8.0
- Для проверок Lint, поставляемых вместе с Compose, теперь требуется AGP версии 8.8.2 или более поздней. Если вы не можете обновить AGP, обновите Lint отдельно, указав в файле gradle.properties версию
android.experimental.lint.version=8.8.2или более новую. Чтобы выполнять проверки Compose lint в IDE, требуется Android Studio Ladybug или более новая версия. - Создана новая библиотека аннотаций времени выполнения. Он содержит определения аннотаций без зависимости от среды выполнения Compose, поэтому его можно использовать в модулях, не связанных с Compose.
@Stable,@Immutableи@StableMarkerперенесены в аннотацию времени выполнения, чтобы можно было аннотировать модули, не относящиеся к Compose.@FrequentlyChangingValueи@RememberInCompositionдобавлены в аннотацию времени выполнения.@FrequentlyChangingValue– декларации, которые могут привести к частым перерисовкам, а@RememberInComposition– декларации, которые следует запомнить при отрисовке. При неправильном использовании будут показываться предупреждения.
androidx.compose.runtime:runtimeтеперь поддерживает дополнительные платформы. Поддержка целевых платформ для ПК, iOS и нативных приложений была перенесена из проекта Compose Multiplatform от JetBrains и будет выпускаться через Google Maven. Другие артефакты Compose не затронуты.
Версия 1.9.0-rc01
30 июля 2025 г.
Выход androidx.compose.runtime:runtime-*:1.9.0-rc01. Версия 1.9.0-rc01 содержит эти коммиты.
Исправление ошибок
- Обновление наблюдателя регистрации композиции, чтобы он вызывался до начальной композиции. (I4adca, b/430600932)
Версия 1.9.0-beta03
16 июля 2025 г.
Выход androidx.compose.runtime:runtime-*:1.9.0-beta03. Версия 1.9.0-beta03 содержит эти коммиты.
Версия 1.9.0-beta02
2 июля 2025 г.
Выход androidx.compose.runtime:runtime-*:1.9.0-beta02. Версия 1.9.0-beta02 содержит эти коммиты.
Исправление ошибок
- Уменьшен срок хранения значений в таблице слотов между композициями. В некоторых случаях ссылка в таблице слотов может быть на один кадр длиннее, чем необходимо. (I49e74, b/418516940)
- Удаление искажения имен методов Kotlin для горячей перезагрузки. (Ic56a3, b/426871325)
Версия 1.9.0-beta01
18 июня 2025 г.
Выход androidx.compose.runtime:runtime-*:1.9.0-beta01. Версия 1.9.0-beta01 содержит эти коммиты.
Изменения в API
- Добавлен API для инструментов, позволяющий анализировать информацию об источнике, добавленную компилятором Compose. (Iceaf9, b/408492167)
SnapshotStateSetтеперь реализуетParcelableна Android, поэтому его можно использовать как частьrememberSaveable { ... }. (I755dd, b/378623803)SnapshotStateListтеперь реализуетParcelableна Android, поэтому его можно использовать как частьrememberSaveable { ... }. (Id18be, b/378623803)- Теперь
movableContentOf()отмечен аннотацией@RememberInComposition, которая позволяет инструменту lint обнаруживать неправильное использование (I2738d). - Обновлен экспериментальный API наблюдателей композиции, чтобы обеспечить более полное наблюдение за причинами повторной композиции (I32b6a).
- Измените значение
setDiagnosticStackTraceEnabledна experimental, чтобы учесть будущие изменения этой функции. (I11db3) - Поддержка
currentCompositeKeyHashпрекращена. Используйте вместо негоcurrentCompositeKeyHashCode. Новый API кодирует тот же хеш с помощью большего количества битов, что экспоненциально снижает вероятность того, что две случайные несвязанные группы в иерархии композиции будут иметь один и тот же ключ хеша. (I4cb6a, b/177562901) - Для проектов, выпущенных с Kotlin 2.0, требуется KGP 2.0.0 или более поздней версии (Idb6b5).
@Stable,@Immutableи@StableMarkerбыли перенесены в аннотацию времени выполнения (совместимым способом). Теперь вы можете использовать аннотацию runtime-annotation, если хотите использовать эти аннотации из библиотек, которые не зависят от Compose. (I23a16)- Перегрузка
rememberSaveable, принимающаяKSerializer, переименована вrememberSerializable. Это изменение уточняет, как использовать его сkotlinx.serialization. Поддержка общих классовkotlinx.Serializableнепосредственно вrememberSaveableпотребует параметра типаreified, что нарушит совместимость с исходным кодом, поскольку все сайты вызовов должны будут предоставлять информацию о конкретном типе во время компиляции. (Idb875, I38627, b/376028110)
Исправление ошибок
- Композиции, в которых был задан приостанавливаемый контент, но показ был отменен, необходимо удалить. Теперь это проверяется композицией и вызовет исключение, если используется повторно. (I2daa5, b/406792785)
- Исправлена ошибка, из-за которой при удалении композиции с возможностью приостановки наблюдателям отправлялся ложный сигнал
onForgotten. ПользователюRememberObservers, который отменил приостановленную композицию, следует отправить только событие onAbandoned. (I26f54) - Исправлена проблема с перемещаемым контентом, из-за которой недействительные данные, полученные на поздних этапах обработки перемещаемого контента, добавлялись в компоновщик, но не обновлялись при перемещении контента, в результате чего контент компоновался в неправильном месте. (Icd2fa, b/409439507)
- Исправлена проблема, из-за которой перемещаемый контент становился недействительным после создания, но до перемещения. (I99eac, b/229001114)
- Вызов
remove()итератора списка, созданногоSnapshotStateListпосле вызоваprevious(), мог привести к удалению неправильного элемента из списка и не соответствовал тому, что делаетArrayListдля той же последовательности вызовов. (I05ab7, b/417493222) - Исправлена проблема с порядком отправки
onForgotton, из-за которой, например,onDisposeодноразовых эффектов могли выполняться в неправильном порядке. (Ic1c91, b/417450712) - Исправлена ошибка, из-за которой при использовании композиции с возможностью приостановки не удавалось повторно использовать обработку состояния (Ife96e, b/404058957).
- Исправлена ошибка, из-за которой при приостановке и возобновлении воспроизведения композиции использовалось предыдущее состояние, хотя некоторые данные, прочитанные во время паузы, изменились и требовали повторной обработки. (I441d1, b/416209738)
- Исправлена ошибка, из-за которой не удавалось приостановить отправку данных в композиции, в рамках проблемы b/404058957. Предыдущее исправление было неполным. (I1afd4, b/404058957)
OffsetApplierтеперь правильно переопределяетapply(), который был введен вместе с возможностью приостанавливать композицию. Если этого не сделать, при обновлении виртуальных узлов может возникнуть исключение. (Idbf31, b/409291131)- Устранена взаимоблокировка, которая могла влиять на пользователей Molecule, когда приостановленный вызов
FrameClock.withFrameNanosотменялся во время отправки кадра. (I89cab, b/407027032) - Recomposer может простаивать при наличии перемещаемого контента (Ie5416, b/409267170)
- Порядок, в котором
onReuseиonDeactivateмогут быть перевернуты во время приостановки композиции. Теперь они гарантированно будут происходить в порядкеonDeactivate/onReuse. (I996e4, b/404058957) - Исправлена отправка наблюдателей в композиции с возможностью приостановки, чтобы избежать отправки запомненных и забытых объектов в одном приложении (I570b2, b/404645679, b/407931790).
- Переключились с
LifecycleRegistryна небезопасный режим в Compose Multiplatform, чтобы отключить проверкиMainThreadи исправить проблемы с потоками. Подробнее о CMP-8227… (Icee87)
Внешний вклад
- Исправлена ошибка, из-за которой при использовании
RecompositionMode.Immediateв Molecule могли пропускаться повторные композиции. (I9f3a9, b/419527812) - Добавлены методы получения данных
PausableComposition,isAppliedиisCancelled, которые позволяют проверять состояниеPausableComposition. (I994aa) - В аннотацию
FunctionKeyMetaдобавлено значениеAnnotationTarget.FUNCTION. (I08021)
Версия 1.9.0-alpha04
4 июня 2025 г.
Выход androidx.compose.runtime:runtime-*:1.9.0-alpha04. Версия 1.9.0-alpha04 содержит эти коммиты.
Изменения в API
SnapshotStateSetтеперь реализует Parcelable в Android, поэтому его можно использовать как частьrememberSaveable { ... }. (I755dd, b/378623803)SnapshotStateListтеперь реализует Parcelable в Android, поэтому его можно использовать как частьrememberSaveable { ... }. (Id18be, b/378623803)- Теперь
movableContentOf()отмечен аннотацией@RememberInComposition, которая позволяет инструменту lint обнаруживать неправильное использование (I2738d). - Обновлен экспериментальный API наблюдателей композиции, чтобы обеспечить более полное наблюдение за причинами повторной композиции (I32b6a).
Исправление ошибок
- Исправлена проблема с порядком отправки
onForgotton, из-за которой, например,onDisposeодноразовых эффектов выполнялись в неправильном порядке. (Ic1c91, b/417450712) - Исправлена ошибка, из-за которой при использовании композиции с возможностью приостановки не удавалось повторно использовать обработку состояния (Ife96e, b/404058957).
- Исправлена незначительная ошибка, из-за которой обнаружение изменяемых коллекций было несовместимо с K1 и K2 (Ie4878).
- Исправлена незначительная ошибка, из-за которой поиск аннотаций в переопределенных методах доступа к свойствам был несовместим с процессорами K1 и K2 (I9900d).
Внешний вклад
- Исправлена ошибка, из-за которой при использовании
RecompositionMode.Immediateв Molecule могли пропускаться повторные композиции. (I9f3a9, b/419527812) - Добавлены геттеры
PausableCompositionisApplied иisCancelled, которые позволяют проверять состояниеPausableComposition. (I994aa)
Версия 1.9.0-alpha03
20 мая 2025 г.
Выход androidx.compose.runtime:runtime-*:1.9.0-alpha03. Версия 1.9.0-alpha03 содержит эти коммиты.
Изменения в API
- Измените значение
setDiagnosticStackTraceEnabledна experimental, чтобы учесть будущие изменения этой функции. (I11db3)
Исправление ошибок
- Исправлена ошибка, из-за которой при приостановке и возобновлении воспроизведения композиции использовалось предыдущее состояние, хотя некоторые данные, прочитанные во время паузы, изменились и требовали повторной обработки. (I441d1, b/416209738)
- Исправлена ошибка, из-за которой не удавалось приостановить создание композиции (предыдущее исправление было неполным). (I1afd4, b/404058957)
SaveableStateHolder.SaveableStateProviderтеперь предоставляетLocalSavedStateRegistryOwnerдля своего контента с помощью композиции. (Ia2761, b/413108878)androidx.compose.runtime.saveableтеперь зависит отandroidx.lifecycle.runtime.compose. (I53228, b/413108878)
Версия 1.9.0-alpha02
7 мая 2025 г.
Выход androidx.compose.runtime:runtime-*:1.9.0-alpha02. Версия 1.9.0-alpha02 содержит эти коммиты.
Изменения в API
- Устаревший тег
rememberSaveableс пользовательским значением параметра key. Он игнорирует позиционирование, что приводит к ошибкам состояния и непоследовательному поведению (например, непреднамеренному обмену состоянием или его потере, проблемам во вложенных элементахLazyLayouts). Удалите параметр key, чтобы использовать позиционирование для согласованного состояния с локальной областью действия. Подробную информацию можно найти в полном сообщении о фиксации. (I5e6ff, b/357685851)
Исправление ошибок
OffsetApplierтеперь правильно переопределяетapply(), который был введен вместе с возможностью приостанавливать композицию. Если этого не сделать, при обновлении виртуальных узлов может возникнуть исключение. (Idbf31, b/409291131)- Устранена взаимоблокировка, которая могла влиять на пользователей Molecule, когда приостановленный вызов
FrameClock.withFrameNanosотменялся во время отправки кадра. (I89cab, b/407027032) - Recomposer может перейти в режим ожидания, а состояние перемещаемого контента будет по-прежнему ожидать отмены. Обычно этого не происходит, поскольку состояние перемещаемого контента отбрасывается в основном цикле Recomposer. Однако это может произойти в композиции с возможностью паузы, когда перемещаемый контент удаляется во время
resume()(Ie5416, b/409267170). - Порядок, в котором
onReuseиonDeactivateмогут быть перевернуты во время приостановки композиции. Теперь они гарантированно будут выполняться в порядке, указанном вonDeactivate/onReuse. (I996e4, b/404058957)
Версия 1.9.0-alpha01
23 апреля 2025 г.
Выход androidx.compose.runtime:runtime-*:1.9.0-alpha01. Версия 1.9.0-alpha01 содержит эти коммиты.
Изменения в поведении
- Для проверок Lint, поставляемых вместе с Compose, теперь требуется AGP версии 8.8.2 или более поздней. Если вы не можете обновить AGP, обновите Lint отдельно, используя версию
android.experimental.lint.version=8.8.2(или более новую) в файлеgradle.properties. Чтобы выполнять проверки Compose lint в IDE, требуется Android Studio Ladybug или более новая версия.
Изменения в API
- Поддержка
currentCompositeKeyHashпрекращена. Используйте вместо негоcurrentCompositeKeyHashCode. Новый API кодирует тот же хеш с помощью большего количества битов, что экспоненциально снижает вероятность того, что две случайные несвязанные группы в иерархии композиции будут иметь один и тот же ключ хеша. (I4cb6a, b/177562901) - Для проектов, выпущенных с Kotlin 2.0, требуется KGP 2.0.0 или более поздней версии (Idb6b5).
@Stable,@Immutableи@StableMarkerбыли перенесены в аннотацию времени выполнения (совместимым способом). Теперь вы можете использовать аннотацию runtime-annotation, если хотите использовать эти аннотации из библиотек, которые не зависят от Compose. (I23a16)- Удалены функции
onCreatingиonDisposing, поскольку они устарели и были переименованы вonPreCreateиonPreDispose. На этом переименование будет завершено. (I97461) - Добавление локальной композиции, которая позволяет прикреплять трассировку стека на основе местоположения узла в композиции. (Ie0bda, b/354163858)
- Добавлены диагностические трассировки стека Compose на основе информации об источнике, хранящейся в композиции. (I3db9f, b/354163858)
- Мы отказались от использования параметра
runWithTimingDisabledв пользу параметраrunWithMeasurementDisabled, который более точно описывает поведение: все показатели приостановлены. Кроме того, мы добавили суперклассMicrobenchmarkScope, поскольку нельзя переопределить функциюrunWithMeasurementDisabled, чтобы открыть доступ, так как она встроена. (I9e23b, b/389149423, b/149979716) - Добавлена аннотация
@FrequentlyChangingValue, с помощью которой можно отмечать функции и геттеры свойств, чтобы указать, что их не следует вызывать напрямую в композиции, поскольку это может привести к частым повторным композициям. Например, чтобы отметить значения позиции прокрутки и анимации. Предупреждения предоставляются соответствующей проверкой lint. (I83630, b/234042500) - Добавлена аннотация
@RememberInComposition, которая может отмечать конструкторы, функции и геттеры свойств, чтобы указать, что их нельзя вызывать напрямую внутри композиции, не запоминая. Ошибки будут выявляться с помощью соответствующей проверки lint. Эту аннотацию можно использовать для пометки объявлений, которые возвращают объекты с состоянием или изменяемые объекты, объекты, чью идентичность важно сохранить при композиции, или объекты, которые дорого инициализировать и которые следует кешировать при композиции. (Ie7db0) - Добавлена новая перегрузка
rememberSaveable, которая поддерживаетKSerializerдля сохранения состояния с безопасностью типов с помощью KotlinX Serialization. Существующий API на основеSaverпо-прежнему поддерживается. (Iea4ab, b/376028110)
Исправление ошибок
- Исправлена отправка наблюдателей в композиции с возможностью приостановки, чтобы избежать отправки запомненных и забытых объектов в одном приложении (I570b2, b/404645679, b/407931790).
- Методы
SnapshotObserveronCreating переименованы вonPreCreateиonDisposingвonPreDisposeв соответствии с рекомендациями по работе с API. Предыдущие методы устарели, а новые по умолчанию вызывают старые, поэтому существующие реализации этого интерфейса будут работать, пока методы не будут удалены. Эти методы будут удалены в версии 1.9.0 alpha в следующем CL, который будет опубликован вскоре после этого. Они будут удалены из бета-версии 1.8 до выхода стабильной версии 1.8. (I6d753) - Исправлена ошибка, из-за которой запомненные значения могли быть неправильно забыты и пересчитаны при повторном создании пропущенной группы, которая появляется после перемещаемой группы (I62cab, b/383769314).
- Добавлена поддержка стека вызовов Compose в
LaunchedEffectиrememberCoroutineScope(I705c0, b/354163858) - Для проверок Compose Lint теперь требуется минимальная версия AGP 8.8.2 из командной строки и Android Studio Ladybug для поддержки IDE. Если вы используете более раннюю версию AGP, вы можете задать значение
android.experimental.lint.version=8.8.2в файле gradle.properties, чтобы обновить версию Lint, не затрагивая AGP. (I6f2a8)
Внешний вклад
- В аннотацию
FunctionKeyMetaдобавлено значениеAnnotationTarget.FUNCTION. (I08021)
Версия 1.8
Версия 1.8.3
18 июня 2025 г.
Выход androidx.compose.runtime:runtime-*:1.8.3. Версия 1.8.3 содержит эти коммиты.
Версия 1.8.2
20 мая 2025 г.
Выход androidx.compose.runtime:runtime-*:1.8.2. Версия 1.8.2 содержит эти коммиты.
Версия 1.8.1
7 мая 2025 г.
Выход androidx.compose.runtime:runtime-*:1.8.1. Версия 1.8.1 содержит эти коммиты.
Версия 1.8.0
23 апреля 2025 г.
Выход androidx.compose.runtime:runtime-*:1.8.0. Версия 1.8.0 содержит эти коммиты.
Версия 1.8.0-rc03
9 апреля 2025 г.
Выход androidx.compose.runtime:runtime-*:1.8.0-rc03. Версия 1.8.0-rc03 содержит эти коммиты.
Версия 1.8.0-rc02
26 марта 2025 г.
Выход androidx.compose.runtime:runtime-*:1.8.0-rc02. Версия 1.8.0-rc02 содержит эти коммиты.
Версия 1.8.0-rc01
12 марта 2025 г.
Выход androidx.compose.runtime:runtime-*:1.8.0-rc01. Версия 1.8.0-rc01 содержит эти коммиты.
Изменения в API
- Методы
SnapshotObserveronCreating переименованы вonPreCreateиonDisposingвonPreDisposeв соответствии с рекомендациями по работе с API. Предыдущие методы устарели, а новые по умолчанию вызывают старые, поэтому существующие реализации этого интерфейса будут работать, пока методы не будут удалены. Эти методы будут удалены в версии 1.9.0 alpha в следующем CL, который будет опубликован вскоре после этого. Они будут удалены из бета-версии 1.8 до выхода стабильной версии 1.8. (I6d753)
Версия 1.8.0-beta03
26 февраля 2025 г.
Выход androidx.compose.runtime:runtime-*:1.8.0-beta03. Версия 1.8.0-beta03 содержит эти коммиты.
Версия 1.8.0-beta02
12 февраля 2025 г.
Выход androidx.compose.runtime:runtime-*:1.8.0-beta02. Версия 1.8.0-beta02 содержит эти коммиты.
Исправление ошибок
- Повторно вызвать перехваченное исключение в композиции с возможностью приостановки .(384486d)
Версия 1.8.0-beta01
29 января 2025 г.
Выход androidx.compose.runtime:runtime-*:1.8.0-beta01. Версия 1.8.0-beta01 содержит эти коммиты.
Изменения в API
- Исправлена проблема, из-за которой при возникновении исключения, не являющегося исключением типа Exception, во время композиции могла появляться ошибка "Ожидающая композиция не применена". (I356be, b/382094412)
Версия 1.8.0-alpha08
15 января 2025 г.
Выход androidx.compose.runtime:runtime-*:1.8.0-alpha08. Версия 1.8.0-alpha08 содержит эти коммиты.
Версия 1.8.0-alpha07
11 декабря 2024 г.
Выход androidx.compose.runtime:runtime-*:1.8.0-alpha07. Версия 1.8.0-alpha07 содержит эти коммиты.
Изменения в API
- Добавлен API инструментов, который помогает инспектору макета сопоставлять вложенные композиции с родительской композицией в случаях, когда узел не используется для объединения композиций. (I4ce3d)
- Арифметические и специальные константы для
SnapshotIdтеперь доступны только сотрудникам Google. При необходимости с объектомSnasphotIdможно выполнять арифметические действия, преобразовав его в объектIntилиLongс помощью методовtoInt()илиtoLong()соответственно. (Ic3a57)
Внешний вклад
- Оптимизируйте хранилище для параметров
movableContentOf. (ed87177)
Версия 1.8.0-alpha06
13 ноября 2024 г.
Выход androidx.compose.runtime:runtime-*:1.8.0-alpha06. Версия 1.8.0-alpha06 содержит эти коммиты.
Изменения в API
- Изменения в
PausableCompositionAPI. Эти изменения несовместимы с предыдущими выпусками версии 1.8.0-alpha (начиная с 1.8.0-alpha02), но поскольку это новые API в версии 1.8.0, обратная совместимость не поддерживается, так как API все ещё находятся на этапе альфа-тестирования. (I39819) - Добавлены API инструментов для отслеживания создания новых композиций в Recomposer (Iaeb7e).
- Добавлен объект "
snapshotId" типа "Long" в объект "Snapshot". Объект "id" больше не поддерживается. Идентификатор снимка экрана был изменен сIntнаLong, чтобы избежать переполнения идентификатора снимка экрана в системах с очень высокой частотой кадров и длительными анимациями. Тип был изменен на expect/actual, чтобы на платформах, где нет собственного типаLong, можно было использовать типIntили другой тип. Платформы, у которых нет встроенной функцииLong, например JavaScript, не должны использовать высокую частоту кадров (более 1000 кадров в секунду), поскольку это приведет к переполнениюIntпримерно каждые 24 дня. (I38ac3, b/374821679)
Исправление ошибок
- Устранено исключение
providesDefaultдля одного объектаprovides. (aosp/3318540 b/374263387) - Оптимизация
ChangeList. (3318538)
Версия 1.8.0-alpha05
30 октября 2024 г.
Выход androidx.compose.runtime:runtime-*:1.8.0-alpha05. Версия 1.8.0-alpha05 содержит эти коммиты.
Исправление ошибок
- Исправлена ошибка переполнения стека при добавлении
Int.MAX_VALUEвSnapshotIdSet. (b/370536104, Ic4179f6) - Микрооптимизация во время выполнения (I50c60)
- Разрешить R8 удалять вызовы runtimeCheck для отладки (I8c44)
- Сделать
compoundKeyOfитеративным вместо рекурсивного (I5817f)
Внешний вклад
- Реализация стеков со списками коллекций (I7d47c)
Версия 1.8.0-alpha04
16 октября 2024 г.
Выход androidx.compose.runtime:runtime-*:1.8.0-alpha04. Версия 1.8.0-alpha04 содержит эти коммиты.
Улучшения производительности
- Укажите идентификатор снимка для записей состояния в конструкторе (85c00f)
- Рефакторинг
SnapshotState***для устранения ошибок проверки класса (6ee4a6) - Исправьте правила R8, чтобы предотвратить встраивание исключений (5beb92)
- Микрооптимизация операций (d73c5c)
- Оптимизация распределения
SynchronizedObjectв JVM (2b043f)
Версия 1.8.0-alpha03
2 октября 2024 г.
Выход androidx.compose.runtime:runtime-*:1.8.0-alpha03. Версия 1.8.0-alpha03 содержит эти коммиты.
Улучшения производительности
- Ленивая инициализация дочернего контекста для
rememberCoroutineScope(f61464)rememberCoroutineScopeобычно используется для запуска сопрограмм в ответ на события, которые происходят после композиции. В некоторых случаях эти события могут не произойти, что приведет к дополнительным расходам на создание и отмену заданий без какой-либо выгоды.- Сделай так, чтобы область, возвращаемая функцией
rememberCoroutineScope, создавала свойcoroutineContextлениво при обращении, полностью избегая создания и отмены задания, если область никогда не используется.
Версия 1.8.0-alpha02
18 сентября 2024 г.
Выход androidx.compose.runtime:runtime-*:1.8.0-alpha02. Версия 1.8.0-alpha02 содержит эти коммиты.
Новые функции
- Добавлен тег
PausableComposition, который позволяет создавать субкомпозицию, которую можно приостановить во время композиции и применить асинхронно к композиции. Для приостановки требуется поддержка компилятора, которая сейчас разрабатывается. (I3394b)
Версия 1.8.0-alpha01
4 сентября 2024 г.
Выход androidx.compose.runtime:runtime-*:1.8.0-alpha01. Версия 1.8.0-alpha01 содержит эти коммиты.
Версия 1.7
Версия 1.7.8
12 февраля 2025 г.
Выход androidx.compose.runtime:runtime-*:1.7.8. Версия 1.7.8 содержит эти коммиты.
Версия 1.7.7
29 января 2025 г.
Выход androidx.compose.runtime:runtime-*:1.7.7. Изменений по сравнению с версией 1.7.6 нет.
Выход androidx.compose.runtime:runtime-*:1.7.6. Версия 1.7.6 содержит эти коммиты.
Версия 1.7.5
30 октября 2024 г.
Выход androidx.compose.runtime:runtime-*:1.7.5. Версия 1.7.5 содержит эти коммиты.
Версия 1.7.4
16 октября 2024 г.
Выход androidx.compose.runtime:runtime-*:1.7.4. Версия 1.7.4 содержит эти коммиты.
Версия 1.7.3
2 октября 2024 г.
Выход androidx.compose.runtime:runtime-*:1.7.3. Версия 1.7.3 содержит эти коммиты.
Версия 1.7.2
18 сентября 2024 г.
Выход androidx.compose.runtime:runtime-*:1.7.2. Версия 1.7.2 содержит эти коммиты.
Версия 1.7.1
10 сентября 2024 г.
- Объекты Android не изменились. Удалено
-desktopартефактов, добавлено-jvmStubsи-linuxx64Stubsартефактов. Ни один из этих целевых показателей не предназначен для использования. Это плейсхолдеры, которые помогают Jetbrains Compose.
Версия 1.7.0
4 сентября 2024 г.
Выход androidx.compose.runtime:runtime-*:1.7.0. Версия 1.7.0 содержит эти коммиты.
Важные изменения с версии 1.6.0
- Добавлена возможность указать локаль композиции, которая вычисляется на основе значений других локалей композиции по умолчанию с помощью свойства
compositionLocalWithComputedDefault()или путем передачи лямбда-функции для вычисления значения с помощью свойстваprovidesComputedвместоprovides. - Значение локальной композиции можно получить с помощью свойства
currentValueлокальной композиции, доступного из лямбда-функции, вычисляющей значение. Он используется вместоcurrent, который доступен только в функциях@Composable. (Iadbc0) - Новые объекты состояния сразу же доступны из других снимков, включая глобальный, с их начальным состоянием. Все последующие изменения будут видны только после применения снимка, в котором был создан объект.
- Начальное состояние
mutableStateOf(), а также его примитивных версий – это значение, переданное в качестве параметра вmutableStateOf(). Изначально поляmutableStateListOf()иmutableStateMapOf()пустые. - Добавлены
Snapshot.isInSnapshotиSnapshot.PreexistingSnapshotId, которые позволяют объекту состояния быть сразу доступным из глобального снимка после его создания. - Чтобы пользовательские объекты состояния были доступны сразу, следуйте шаблону изменений, внесенных во встроенные объекты моментальных снимков. (I84a17)
- Включите
nonSkippingGroupOptimizationдля библиотек Compose. Это позволяет сделать сгенерированный код для всех неперезапускаемых функций androidx более эффективным. В будущем мы планируем включить эту функцию по умолчанию. I(acbc08) - Аннулирование лямбда-функций, которые можно составить, в подкомпозициях в одном кадре. (98301c)
- Вызывайте обратный вызов
onReleaseв том же порядке, что иonForgotten. (2cd790) - Включить режим пропуска (ed1766)
- Уникальность конверсий типа "
currentCompoundHashKey" в большем количестве случаев (d4a872)
Версия 1.7.0-rc01
21 августа 2024 г.
Выход androidx.compose.runtime:runtime-*:1.7.0-rc01. Версия 1.7.0-rc01 содержит эти коммиты.
Версия 1.7.0-beta07
7 августа 2024 г.
Выход androidx.compose.runtime:runtime-*:1.7.0-beta07. Версия 1.7.0-beta07 содержит эти коммиты.
Версия 1.7.0-beta06
24 июля 2024 г.
Выход androidx.compose.runtime:runtime-*:1.7.0-beta06. Версия 1.7.0-beta06 содержит эти коммиты.
Версия 1.7.0-beta05
10 июля 2024 г.
Выход androidx.compose.runtime:runtime-*:1.7.0-beta05. Версия 1.7.0-beta05 содержит эти коммиты.
Версия 1.7.0-beta04
26 июня 2024 г.
Выход androidx.compose.runtime:runtime-*:1.7.0-beta04. Версия 1.7.0-beta04 содержит эти коммиты.
Версия 1.7.0-beta03
12 июня 2024 г.
Выход androidx.compose.runtime:runtime-*:1.7.0-beta03. Версия 1.7.0-beta03 содержит эти коммиты.
Версия 1.7.0-beta02
29 мая 2024 г.
Выход androidx.compose.runtime:runtime-*:1.7.0-beta02. Версия 1.7.0-beta02 содержит эти коммиты.
Версия 1.7.0-beta01
14 мая 2024 г.
Выход androidx.compose.runtime:runtime-*:1.7.0-beta01. Версия 1.7.0-beta01 содержит эти коммиты.
Версия 1.7.0-alpha08
1 мая 2024 г.
Выход androidx.compose.runtime:runtime-*:1.7.0-alpha08. Версия 1.7.0-alpha08 содержит эти коммиты.
Версия 1.7.0-alpha07
17 апреля 2024 г.
Выход androidx.compose.runtime:runtime-*:1.7.0-alpha07. Версия 1.7.0-alpha07 содержит эти коммиты.
Новые функции
- Добавлена возможность указать локаль композиции, которая вычисляется на основе значений других локалей композиции по умолчанию с помощью свойства
compositionLocalWithComputedDefault()или путем передачи лямбда-функции для вычисления значения с помощью свойстваprovidesComputedвместоprovides. - Значение локальной композиции можно получить с помощью свойства
currentValueлокальной композиции, доступного из лямбда-функции, вычисляющей значение. Он используется вместоcurrent, который доступен только в функциях@Composable. (Iadbc0)
Изменения в API
- Новые объекты состояния сразу же доступны из других снимков, включая глобальный, с их начальным состоянием. Все последующие изменения будут видны только после применения снимка, в котором был создан объект.
- Начальное состояние
mutableStateOf(), а также его примитивных версий – это значение, переданное в качестве параметра вmutableStateOf(). Изначально поляmutableStateListOf()иmutableStateMapOf()пустые. - Добавлены
Snapshot.isInSnapshotиSnapshot.PreexistingSnapshotId, которые позволяют объекту состояния быть сразу доступным из глобального снимка после его создания. - Чтобы пользовательские объекты состояния были доступны сразу, следуйте шаблону изменений, внесенных во встроенные объекты моментальных снимков. (I84a17)
Исправление ошибок
- Исправлено объединение
readObserverво вложенных снимках. Из-за этого вложенные производные состояния неправильно становились недействительными при использовании внутриsnapshotFlow. (Idf138)
Версия 1.7.0-alpha06
3 апреля 2024 г.
Выход androidx.compose.runtime:runtime-*:1.7.0-alpha06. Версия 1.7.0-alpha06 содержит эти коммиты.
Исправление ошибок
- Исправлена обработка значений атрибута "предоставьте одно значение"
providesDefault(538f45) - Избегайте взаимоблокировки в Recomposer при доступе к часам кадра (07e5c6)
Версия 1.7.0-alpha05
20 марта 2024 г.
Выход androidx.compose.runtime:runtime-*:1.7.0-alpha05. Версия 1.7.0-alpha05 содержит эти коммиты.
Исправление ошибок
- Удалить изменения, внесенные после деактивации композиции (5950bc)
Версия 1.7.0-alpha04
6 марта 2024 г.
Выход androidx.compose.runtime:runtime-*:1.7.0-alpha04. Версия 1.7.0-alpha04 содержит эти коммиты.
Улучшения производительности
- Вызов
Snapshot.currentодин раз для каждой оценки производного состояния (ee7daf) - Прочитать
currentRecordодин раз за наблюдение в композиции (b882b2) - Удаление случайного выделения итератора в
snapshotFlow(231e56) - Включите
nonSkippingGroupOptimizationдля библиотек Compose. Это позволяет сделать сгенерированный код для всех неперезапускаемых функций androidx более эффективным. В будущем мы планируем включить эту функцию по умолчанию. I(acbc08)
Версия 1.7.0-alpha03
21 февраля 2024 г.
Выход androidx.compose.runtime:runtime-*:1.7.0-alpha03. Версия 1.7.0-alpha03 содержит следующие коммиты:
Изменения в API
- Добавлены группы замены для улучшения обнаружения изменений (0941b5)
Улучшения производительности
- Улучшено распределение памяти при обнаружении изменений (53e7fd).
- Устранена утечка памяти в редакторе (0e097d).
- Используйте
ScopeMap, чтобы передавать недействительные данные при повторном создании (e19a7e) - Оптимизация карты недействительности для сохранения только производных состояний (f11c44)
- Заменить все случаи использования
IdentityArraySetнаScatterSet(db572e) - Оптимизируйте
removeScopeвScopeMap(bb0530)
Версия 1.7.0-alpha02
7 февраля 2024 г.
Выход androidx.compose.runtime:runtime-*:1.7.0-alpha02. Версия 1.7.0-alpha02 содержит следующие коммиты:
Исправление ошибок
- Аннулирование лямбда-функций, которые можно составить, в подкомпозициях в одном кадре. (98301c)
- Вызывайте обратный вызов
onReleaseв том же порядке, что иonForgotten. (2cd790) - Фильтр изменил состояния, которые не наблюдаются в
snapshotFlow. (796b80)
Улучшения производительности
- Изменять наблюдателя снимка, если он уже прозрачный. (f60f30)
- Оптимизация
SnapshotIdSet.lowest(). (7ae149) - Используйте в
SnapshotIdSetfold()без распределения. (532b7d) - Удаление выделения итератора (83f96b)
Версия 1.7.0-alpha01
24 января 2024 г.
Выход androidx.compose.runtime:runtime-*:1.7.0-alpha01. Версия 1.7.0-alpha01 содержит следующие коммиты:
Оптимизация эффективности
- Добавлена возможность создавать слоты после добавления детской группы (b5960c).
- Оптимизированы изменения записи состояний снимков (28c3fe).
- Включить режим пропуска (ed1766)
Исправление ошибок
- Учитывайте метаданные параметра по умолчанию во встроенной функции запоминания (096665)
- Уникальность конверсий типа "
currentCompoundHashKey" в большем количестве случаев (d4a872) - Реализация групп при выходе из встроенного вызова функции (2a90fc)
Версия 1.6
Версия 1.6.8
12 июня 2024 г.
Выход androidx.compose.runtime:runtime-*:1.6.8. Версия 1.6.8 содержит эти коммиты.
Версия 1.6.7
1 мая 2024 г.
Выход androidx.compose.runtime:runtime-*:1.6.7. Версия 1.6.7 содержит эти коммиты.
Версия 1.6.6
17 апреля 2024 г.
Выход androidx.compose.runtime:runtime-*:1.6.6. С момента последнего выпуска изменений нет.
Версия 1.6.5
3 апреля 2024 г.
Выход androidx.compose.runtime:runtime-*:1.6.5. Версия 1.6.5 содержит эти коммиты.
Версия 1.6.4
20 марта 2024 г.
Выход androidx.compose.runtime:runtime-*:1.6.4. Версия 1.6.4 содержит эти коммиты.
Версия 1.6.3
6 марта 2024 г.
Выход androidx.compose.runtime:runtime-*:1.6.3. Версия 1.6.3 содержит эти коммиты.
Версия 1.6.2
21 февраля 2024 г.
Выход androidx.compose.runtime:runtime-*:1.6.2. Версия 1.6.2 содержит следующие коммиты:
Версия 1.6.1
7 февраля 2024 г.
Выход androidx.compose.runtime:runtime-*:1.6.1. Версия 1.6.1 содержит следующие коммиты:
Исправление ошибок
- Вызывайте обратный вызов
onReleaseв том же порядке, что иonForgotten. (2cd790) - Фильтр изменил состояния, которые не наблюдаются в
snapshotFlow. (796b80)
Версия 1.6.0
24 января 2024 г.
Выход androidx.compose.runtime:runtime-*:1.6.0. Версия 1.6.0 содержит следующие коммиты:
Важные изменения с версии 1.5.0
Новые функции
- Повторно выбрасывать исключения, которые были проигнорированы во время цикла повторной композиции (4dff9a)
Оптимизация эффективности
- Оптимизированы изменения записи состояний снимков (28c3fe).
- Оптимизация
rememberSaveable(f01d79) - Отложить повторное считывание производных состояний до записи изменений (f38099)
- Улучшено предоставление локальных значений композиции (a337ea)
Исправление ошибок
- Устранена утечка памяти в таблице слотов (73fcfe).
- Пропускать повторное создание вложенных композиций, которые будут удалены. (Ieeb99, b/254645321)
- Запускайте жизненные циклы
RememberObserver, только если они хранятся в вычислении "Запомнить". (f6b4dc) - Ограничить захват
$dirtyвстроенными лямбда-выражениями. (acfca0) - Исправлена ошибка, из-за которой перемещаемый контент иногда получал неверные локали композиции. (035cd6)
Версия 1.6.0-rc01
10 января 2024 г.
Выход androidx.compose.runtime:runtime-*:1.6.0-rc01. Версия 1.6.0-rc01 содержит следующие коммиты:
Версия 1.6.0-beta03
13 декабря 2023 г.
Выход androidx.compose.runtime:runtime-*:1.6.0-beta03. Версия 1.6.0-beta03 содержит следующие коммиты:
Версия 1.6.0-beta02
29 ноября 2023 г.
Выход androidx.compose.runtime:runtime-*:1.6.0-beta02. Версия 1.6.0-beta02 содержит следующие коммиты.
Версия 1.6.0-beta01
15 ноября 2023 г.
Выход androidx.compose.runtime:runtime-*:1.6.0-beta01. Версия 1.6.0-beta01 содержит следующие коммиты:
Изменения в API
- Передавать определенные значения стабильности в аннотации. (274a4c)
Исправление ошибок
- Используйте ссылочные правила для локального состояния композиции в контексте. (83361c)
- Ограничьте захват $dirty встроенными лямбда-выражениями. (acfca0)
- Исправлена ошибка, из-за которой перемещаемый контент иногда получал неверные локали композиции. (035cd6)
- В
RecomposeScopeImplиспользуются более быстрые хеш-карты без выделения памяти. (d79494) - Использовать аккаунт
ObjectIntMapв приложении "DerivedState". (21862e) - Используйте
IntRefдля целого числаSnapshotThreadLocalвDerivedState. (04eaf4)
Версия 1.6.0-alpha08
18 октября 2023 г.
Выход androidx.compose.runtime:runtime-*:1.6.0-alpha08. Версия 1.6.0-alpha08 содержит следующие коммиты.
Исправление ошибок
- Запускайте жизненные циклы
RememberObserver, только если они хранятся в вычислении "Запомнить". (f6b4dc) - Улучшено распределение при сортировке списка недействительных данных. (954d63)
- Используйте новые карты без распределения в
SnapshotStateObserver. (4303ce) - Очищать недействительные данные при отключении композиции. (e001be)
Версия 1.6.0-alpha07
4 октября 2023 г.
Выход androidx.compose.runtime:runtime-*:1.6.0-alpha07. Версия 1.6.0-alpha07 содержит следующие коммиты:
Изменения в API
SnapshotStateListтеперь отмечен какRandomAccess, чтобы можно было использовать версию помощников списков с прямой индексацией. (I5210c, b/219554654)
Версия 1.6.0-alpha06
20 сентября 2023 г.
Выход androidx.compose.runtime:runtime-*:1.6.0-alpha06. Версия 1.6.0-alpha06 содержит следующие коммиты:
Версия 1.6.0-alpha05
6 сентября 2023 г.
Выход androidx.compose.runtime:runtime-*:1.6.0-alpha05. Версия 1.6.0-alpha05 содержит следующие коммиты:
Версия 1.6.0-alpha04
23 августа 2023 г.
Выход androidx.compose.runtime:runtime-*:1.6.0-alpha04. Версия 1.6.0-alpha04 содержит следующие коммиты:
Новые функции
- Повторно выбрасывать исключения, которые были проигнорированы во время цикла повторной композиции (4dff9a)
Изменения в API
- Добавлен метод для деактивации
ReusableComposition, при котором наблюдения удаляются, но узлы остаются на месте. Чтобы активировать отключенную композицию, вызовите методsetContent. (Ib7f31) - Добавлен интерфейс
ReusableCompositionдля управления жизненным циклом и повторным использованием вложенных композиций. (I812d1, b/252846775)
Версия 1.6.0-alpha03
9 августа 2023 г.
Выход androidx.compose.runtime:runtime-*:1.6.0-alpha03. Версия 1.6.0-alpha03 содержит следующие коммиты:
Исправление ошибок
- Исправлена ошибка оптимизации для новых
CompositionLocalProviderклиентов (3118e88) - Исправлена ошибка, из-за которой неправильно разбирались перемещаемые узлы контента. (5e3d59b)
Версия 1.6.0-alpha02
26 июля 2023 г.
Выход androidx.compose.runtime:runtime-*:1.6.0-alpha02. Версия 1.6.0-alpha02 содержит следующие коммиты:
Новые функции и улучшения
- Оптимизация
rememberSaveable(f01d79) - Отложить повторное считывание производных состояний до записи изменений (f38099)
- Улучшено предоставление локальных значений композиции (a337ea)
SideEffectотмечен как@ExplicitGroupsComposable, чтобы не создавать группу. (I74815)- Не сравнивайте композицию локальных карт при повторном использовании (782071)
Изменения в API
- Добавлена специальная перегрузка для
CompositionLocalProviders, которая позволяет избежать издержек, связанных с предоставлением нескольких значений, но при этом сама является издержкой при предоставлении одного значения. (I6d640, b/288169379)
Исправление ошибок
- Устранена утечка памяти в таблице слотов (73fcfe).
- Исправлена ошибка, из-за которой при возврате функцией
stateSaverзначения null не восстанавливалось значениеrememberSaveable(90748c).
Версия 1.6.0-alpha01
21 июня 2023 г.
Выход androidx.compose.runtime:runtime-*:1.6.0-alpha01. Версия 1.6.0-alpha01 содержит следующие коммиты:
Исправление ошибок
- Пропускать повторное создание вложенных композиций, которые будут удалены. (Ieeb99, b/254645321)
- Уменьшено количество выделений при применении моментальных снимков. (I65c09)
- Не вычислять
readableHashвDerivedState, если снимок не был изменен (68c565)
Версия 1.5
Версия 1.5.4
18 октября 2023 г.
Выход androidx.compose.runtime:runtime-*:1.5.4. Версия 1.5.4 содержит следующие коммиты:
Версия 1.5.3
4 октября 2023 г.
Выход androidx.compose.runtime:runtime-*:1.5.3. Версия 1.5.3 содержит следующие коммиты:
Версия 1.5.2
27 сентября 2023 г.
Выход androidx.compose.runtime:runtime-*:1.5.2. Версия 1.5.2 содержит следующие коммиты:
Версия 1.5.1
6 сентября 2023 г.
Выход androidx.compose.runtime:runtime-*:1.5.1. Версия 1.5.1 содержит следующие коммиты:
Версия 1.5.0
9 августа 2023 г.
Выход androidx.compose.runtime:runtime-*:1.5.0. Версия 1.5.0 содержит следующие коммиты:
Изменения в API
- Удалены выделения в рекомпозиции, цветовых анимациях и
AndroidComposeView. (Ib2bfa) - Добавлена аннотация
@StateFactoryMarker, чтобы отмечать функции, которые создают состояния и должны быть заключены в вызовremember. (I64550) - Добавлены примитивные версии State и
MutableState(fb3d89) - Добавлено
Snapshot.isApplyObserverNotificationPending(I672a5) - Добавлены примитивные версии API
State, позволяющие отслеживать значения Int, Long, Float и Double в объектахStateбез штрафов за автоупаковку. Чтобы использовать их, применяйте новые фабричные методыmutableIntState(Int),mutableFloatStateOf(Float)и т. д. (I48e43)
Исправление ошибок
- Пропускать повторное создание вложенных композиций, которые будут удалены. (Ieeb99, b/254645321)
- Не сохранять ссылку на снимок в
ComposerImpl(0206f7) - Не применять композицию дважды (f5791b)
- Обеспечьте аннулирование для неинициализированных производных значений статуса (aa2a92).
- Вызов
onEndChangesво время удаления композиции. (62cc8c) - Исправлена ошибка, из-за которой не удавалось переместить контент в дочернюю композицию (4beb41).
- Устранены потенциальные взаимные блокировки (c1a425 и 8edce0).
- Теперь при получении уведомления ON_STOP рекомпозер, созданный для окна Android, будет блокировать только звонки на номер
withFrameNanos, а не все композиции. Это означает, что окна, связанные с остановленными действиями, будут продолжать перекомпоноваться при изменении данных, но анимации или другие вызывающие функцииwithFrameNanosбудут блокироваться. (Id9e7f, b/240975572) - Выполните обратные вызовы деактивации для
LayoutNode, прежде чем удалять эффекты 3784073 - Исправлены измененные флаги для перезапущенных лямбда-функций ea81df9
- Исправлена регрессия при редактировании в реальном времени для Composable с узлами 73fd4d8
- При получении сигнала ON_STOP трансляция часов кадра должна приостанавливаться, а не композиция ae276f1.
- Аннулирование областей действия
SnapshotStateObserverдля неизмененных производных состояний 84d9b1c - Исправлена потенциальная блокировка при удалении композиций 28761fc
- Исправлена ошибка, из-за которой не удавалось переместить контент в дочернюю композицию 92d4156
- Исправлены измененные флаги для перезапущенных лямбда-функций (8a03e9)
- Выполняйте обратные вызовы деактивации для
LayoutNodeдо удаления эффектов (8b0fa4) - Исправлена ошибка
endToMarker()при завершении работы групп узлов. (d71d980) - Используйте текущую группу
SlotWriterдля проверки деактивации (a0b518b) - Удалите
fillизSlotTable.moveSlotGapTo()и переместите его в close (81f9935) - Исправлена ошибка, из-за которой при перемещении контента не происходило аннулирование (1d7c024)
- Исправлены немедленные аннулирования для перемещенного контента с возможностью перемещения (8676618)
Улучшения производительности
- Не вычисляйте
readableHashвDerivedState, если снимок не был изменен. (307102) - Уменьшенное распределение (I65c09, d7ea77, 727974 и 445808)
- Быстрая отмена создания письма
CoroutineScopes(a55362 и bd382f) - Перезапись записей объектов состояния недоступными записями состояния (c986960)
- При реализации групп используйте композитор правильной области действия (9a5e5b6)
- Используйте
IdentityArraySetдля хранения аннулирований снимков (7f60cca) - Уменьшить выделение ресурсов для наблюдений за снимками (5bc535f)
Версия 1.5.0-rc01
26 июля 2023 г.
Выход androidx.compose.runtime:runtime-*:1.5.0-rc01. Версия 1.5.0-rc01 содержит следующие коммиты:
Исправление ошибок
Отложить повторное считывание производных состояний до записи изменений (f38099)
Доступна необязательная проверка, которая рекомендует перенести
mutableStateOf()вызовов в соответствующие специализированные типы для примитивов. Идентификатор правила:AutoboxingStateCreation. Ранее эта проверка была включена по умолчанию для всех проектов. Чтобы это предупреждение показывалось в редакторе Android Studio и в результатах проверки кода, измените его уровень серьезности с информационного на предупреждение (или выше), объявивwarning "AutoboxingStateCreation"в конфигурации build.gradle или build.gradle.kts модуля, как показано ниже (I34f7e):android { lint { warning "AutoboxingStateCreation" } ... }
Версия 1.5.0-beta03
28 июня 2023 г.
Выход androidx.compose.runtime:runtime-*:1.5.0-beta03. Версия 1.5.0-beta03 содержит следующие коммиты:
Исправление ошибок
- Пропускать повторное создание вложенных композиций, которые будут удалены. (Ieeb99, b/254645321)
Версия 1.5.0-beta02
7 июня 2023 г.
Выход androidx.compose.runtime:runtime-*:1.5.0-beta02. Версия 1.5.0-beta02 содержит следующие коммиты:
Улучшения производительности
- Не вычисляйте
readableHashвDerivedState, если снимок не был изменен. (307102)
Версия 1.5.0-beta01
24 мая 2023 г.
Выход androidx.compose.runtime:runtime-*:1.5.0-beta01. Версия 1.5.0-beta01 содержит следующие коммиты:
Изменения в API
- Удалены выделения в перекомпоновке, цветовых анимациях и
AndroidComposeView(Ib2bfa) - Добавлена аннотация
@StateFactoryMarker, чтобы отмечать функции, которые создают состояния и должны быть заключены в вызовremember. (I64550) - Добавлены примитивные версии State и
MutableState(fb3d89) - Добавлено
Snapshot.isApplyObserverNotificationPending(I672a5)
Исправление ошибок
- Уменьшенное распределение (I65c09, d7ea77, 727974 и 445808)
- Не сохранять ссылку на снимок в
ComposerImpl(0206f7) - Быстрая отмена создания письма
CoroutineScopes(a55362 и bd382f) - Не применять композицию дважды (f5791b)
- Обеспечьте аннулирование для неинициализированных производных значений статуса (aa2a92).
- Вызов
onEndChangesво время удаления композиции. (62cc8c) - Исправлена ошибка, из-за которой не удавалось переместить контент в дочернюю композицию (4beb41).
- Устранение потенциальных взаимных блокировок (c1a425
- При получении сигнала ON_STOP трансляция часов кадра должна приостанавливаться, а не композиция (f4a2d1).
- Исправлены измененные флаги для перезапущенных лямбда-функций (8a03e9)
- Выполняйте обратные вызовы деактивации для
LayoutNodeдо удаления эффектов (8b0fa4)
Внешний вклад
- Добавлено
Snapshot.isApplyObserverNotificationPending(I672a5)
Версия 1.5.0-alpha04
10 мая 2023 г.
Выход androidx.compose.runtime:runtime-*:1.5.0-alpha04. Версия 1.5.0-alpha04 содержит следующие коммиты:
Изменения в API
- Добавлены примитивные версии API
State, позволяющие отслеживать значения Int, Long, Float и Double в объектахStateбез штрафов за автоупаковку. Чтобы использовать их, применяйте новые фабричные методыmutableIntState(Int),mutableFloatStateOf(Float)и т. д. (I48e43)
Исправление ошибок
Вызов
onEndChangesво время удаления композиции. Узлы, удаленные во время периода концентрацииComposition.dispose, подписываются наonEndChanges, чтобы сбросить фокус.(03d4a47)Обеспечьте аннулирование для неинициализированных производных значений статуса. Каждое производное состояние связано со списком зависимостей в
SnapshotStateObserver, который используется для аннулирования областей, связанных с производным состоянием, при каждом изменении зависимости. Изменение зависимости регистрируется при переходе к следующему снимку, который может произойти после чтения производного состояния (из-за вызоваSnapshot.notifyObjectsInitialized()).Предыдущая логика наблюдения за производным состоянием в
SnapshotStateObserverочищала старые зависимости, а затем считывала новое значение. В результате возникало состояние гонки, при котором аннулирование происходило в очищенном состоянии, когда аннулирование зависимостей не было зарегистрировано.Это изменение переупорядочивает чтение производного состояния и очистку зависимостей, гарантируя, что аннулирование всегда происходит в допустимом состоянии. (c472be6)
Версия 1.5.0-alpha03
19 апреля 2023 г.
Выход androidx.compose.runtime:runtime-*:1.5.0-alpha03. Версия 1.5.0-alpha03 содержит следующие коммиты:
Изменения в API
- Теперь при получении уведомления ON_STOP рекомпозер, созданный для окна Android, будет блокировать только звонки на номер
withFrameNanos, а не все композиции. Это означает, что окна, связанные с остановленными действиями, будут продолжать перекомпоноваться при изменении данных, но анимации или другие вызывающие функцииwithFrameNanosбудут блокироваться. (Id9e7f, b/240975572)
Исправление ошибок
- Устранена потенциальная взаимная блокировка в списке и на карте снимков 5c1a425
- Выполните обратные вызовы деактивации для
LayoutNode, прежде чем удалять эффекты 3784073 - Исправлены измененные флаги для перезапущенных лямбда-функций ea81df9
- Исправлена регрессия при редактировании в реальном времени для Composable с узлами 73fd4d8
- При получении сигнала ON_STOP трансляция часов кадра должна приостанавливаться, а не композиция ae276f1.
- Аннулирование областей действия
SnapshotStateObserverдля неизмененных производных состояний 84d9b1c - Исправлена потенциальная блокировка при удалении композиций 28761fc
- Исправлена ошибка, из-за которой не удавалось переместить контент в дочернюю композицию 92d4156
Версия 1.5.0-alpha02
5 апреля 2023 г.
Выход androidx.compose.runtime:runtime-*:1.5.0-alpha02. Версия 1.5.0-alpha02 содержит следующие коммиты:
Новые функции
- Оператор
getValueв Kotlin теперь можно использовать в композициях (f174f6e).
Исправлены ошибки, повышена производительность
- Перезапись записей объектов состояния недоступными записями состояния (c986960)
- При реализации групп используйте композитор правильной области действия (9a5e5b6)
- Исправлена ошибка
endToMarker()при завершении работы групп узлов. (d71d980) - Используйте текущую группу
SlotWriterдля проверки деактивации (a0b518b) - Используйте
IdentityArraySetдля хранения аннулирований снимков (7f60cca) - Удалите
fillвSlotTable.moveSlotGapTo()и переместите его в close (81f9935) - Исправлена ошибка, из-за которой при перемещении контента не происходило аннулирование (1d7c024)
- Исправлены немедленные аннулирования для перемещенного контента с возможностью перемещения (8676618)
- Уменьшить выделение ресурсов для наблюдений за снимками (5bc535f)
Версия 1.5.0-alpha01
22 марта 2023 г.
Выход androidx.compose.runtime:runtime-*:1.5.0-alpha01. Версия 1.5.0-alpha01 содержит следующие коммиты:
Новые функции
- Добавлен
Modifier.Node#coroutineScope, чтобы разрешитьModifier.Nodesзапускать сопрограммы (I76ef9). - Разрешите приложению "
Modifier.Nodes" читать данные из приложения "CompositionLocals", реализовав интерфейсCompositionLocalConsumerModifierNode. (Ib44df)
Версия 1.4
Версия 1.4.3
3 мая 2023 г.
androidx.compose.runtime:runtime-*:1.4.3 выпущен без изменений.
Версия 1.4.2
19 апреля 2023 г.
Выход androidx.compose.runtime:runtime-*:1.4.2. Версия 1.4.2 содержит следующие коммиты:
Исправление ошибок
Исправлена потенциальная взаимная блокировка в списке снимков и на карте 2eb6570
При добавлении контента в
SnapshotStateListилиSnapshotStateMapможет возникнуть взаимная блокировка, если изменение выполняется одновременно с прямой записью в запись состояния. Вероятность возникновения этой ошибки значительно возросла после изменений, внесенных в 93fcae828b, где для освобождения неиспользуемых записей применяются прямые записи.Блокировки теперь упорядочены таким образом, что блокировка снимка никогда не будет предпринята, если удерживается блокировка карты или списка.
Версия 1.4.1
5 апреля 2023 г.
Выход androidx.compose.runtime:runtime-*:1.4.1. Версия 1.4.1 содержит следующие коммиты:
Исправление ошибок
- Исправлена ошибка
endToMarker()при завершении работы групп узлов. d71d980
Версия 1.4.0
22 марта 2023 г.
Выход androidx.compose.runtime:runtime-*:1.4.0. Версия 1.4.0 содержит следующие коммиты:
Важные изменения с версии 1.3.0
- Использовать инициализированное значение из
LiveDataдля первой композиции 3680e25 - Добавьте
ComposeNodeLifecycleCallback, чтобы отслеживать жизненный цикл узлов Compose. 8b6a258 - Добавление ресурса
parameterTypesв аккаунтComposableMethod7b6c7ad
Исправление ошибок и повышение производительности
- Очистить оба индекса области в
SnapshotStateObserver29f4a3e - Добавьте группы, необходимые в теле лямбда-функций, которые нельзя пропустить 7d06752
- Улучшены характеристики ссылок на память в состоянии Snapshot 93fcae8.
- Удаление упаковки при локальном поиске в композиции 0875717
- Используйте правильный ключ для групп узлов, которые нельзя использовать повторно 6388d8d
- Защита
SnapshotStateObserverот рекурсивных и параллельных применений 98cb6ba - Добавлена проверка границ индекса в методе
IdentityArraySet"get" 35a77d3 - Обновление модуля создания писем для использования расширений
ViewTreeLifecycleOwner21c2122 - Отправлять уведомления о применении после того, как Recomposer завершит обработку кадра. 98f2641
- Исправлена ошибка выхода за границы индекса при отмене Recomposer 8f8656f
- Всегда принудительно пересобирать, если изменились родительские поставщики композиции 9526fcc
- Допуск Recomposer для отмененных заданий a55f7ed
- Улучшена обработка недействительных данных для большого количества композиторов 9b7ed67
- Исправлена ошибка, из-за которой не создавались группы закрытия для возвратов, не связанных с местными магазинами b6f590c
Версия 1.4.0-rc01
8 марта 2023 г.
Выход androidx.compose.runtime:runtime-*:1.4.0-rc01. Версия 1.4.0-rc01 содержит следующие коммиты.
Исправление ошибок
Версия 1.4.0-beta02
22 февраля 2023 г.
Выпущены androidx.compose.runtime:runtime:1.4.0-beta02 и androidx.compose.runtime:runtime-saveable:1.4.0-beta02. Версия 1.4.0-beta02 содержит следующие коммиты:
Версия 1.4.0-beta01
8 февраля 2023 г.
Выход androidx.compose.runtime:runtime-*:1.4.0-beta01. Версия 1.4.0-beta01 содержит следующие коммиты:
Изменения в API
- Добавлен параметр
ComposeNodeLifecycleCallback, позволяющий отслеживать жизненный цикл узлов Compose (I3731b). - Добавлена функция
@TestOnlyвComposer.disableSourceInformation(), поскольку ее можно безопасно вызывать только в тесте. (I896c8)
Исправление ошибок
- Удаление рамок при локальном поиске композиции (62f66a)
- Улучшены характеристики ссылок на память в состоянии Snapshot (dfb451).
Версия 1.4.0-alpha05
25 января 2023 г.
Выпущены androidx.compose.runtime:runtime:1.4.0-alpha05 и androidx.compose.runtime:runtime-saveable:1.4.0-alpha05. Версия 1.4.0-alpha05 содержит следующие коммиты.
Изменения в API
- Дополнительные типы и допустимость значения NULL для встроенных и устаревших скрытых функций (I24f91)
Версия 1.4.0-alpha04
11 января 2023 г.
Выход androidx.compose.runtime:runtime-*:1.4.0-alpha04. Версия 1.4.0-alpha04 содержит следующие коммиты:
Изменения в API
TestMonotonicFrameClockтеперь использует правильную аннотацию эксперимента. (I95c9e)
Исправление ошибок
- Защита
SnapshotStateObserverот рекурсивного и параллельного применения (d902fb)
Версия 1.4.0-alpha03
7 декабря 2022 г.
Выход androidx.compose.runtime:runtime-*:1.4.0-alpha03. Версия 1.4.0-alpha03 содержит следующие коммиты:
Изменения в API
- добавление нового общедоступного метода в класс
ComposableMethod, аналогичногоjava.lang.reflect.Method#getParameterTypes()(Iab0c3);
Исправление ошибок
- Уведомления о применении моментальных снимков теперь отправляются после того, как
Recomposerзавершит применение изменений. (Iad6c0, b/222093277)
Версия 1.4.0-alpha02
9 ноября 2022 г.
Выход androidx.compose.runtime:runtime-*:1.4.0-alpha02. Версия 1.4.0-alpha02 содержит следующие коммиты:
Версия 1.4.0-alpha01
24 октября 2022 г.
Выход androidx.compose.runtime:runtime-*:1.4.0-alpha01. Версия 1.4.0-alpha01 содержит следующие коммиты:
Изменения в API
- У пользователей
SnapshotStateListиSnapshotStateMapтеперь есть явные реализацииtoList()иtoMap()соответственно. Эти методы возвращают текущий контент без копирования, поскольку они возвращают внутренние неизменяемые данные, используемые для хранения контента. Это значение можно использовать, например, для создания потока значений с помощьюsnapshotFlowбез необходимости копировать данные. (Ica2bd)
Версия 1.3
Версия 1.3.3
11 января 2023 г.
Выход androidx.compose.runtime:runtime-*:1.3.3. Версия 1.3.3 содержит следующие коммиты:
- Нет изменений с версии 1.3.2
Версия 1.3.2
7 декабря 2022 г.
Выход androidx.compose.runtime:runtime-*:1.3.2. Версия 1.3.2 содержит следующие коммиты:
Исправление ошибок
- Обновлена поддержка androidx.compose.ui 1.3.2
Версия 1.3.1
9 ноября 2022 г.
Выход androidx.compose.runtime:runtime-*:1.3.1. Версия 1.3.1 содержит следующие коммиты:
Версия 1.3.0
24 октября 2022 г.
Выход androidx.compose.runtime:runtime-*:1.3.0. Версия 1.3.0 содержит следующие коммиты:
Важные изменения с версии 1.2.0
Обработка исключений и поддержка изменений в реальном времени
- Чтобы улучшить поддержку редактирования в реальном времени, были добавлены API, позволяющие обрабатывать исключения во время композиции.
- Обработка ошибок композиции при горячей перезагрузке
- Как устранять ошибки редактирования в реальном времени при сохранении или восстановлении
Отслеживание композиции
- API трассировки во время выполнения были добавлены для поддержки новых инструментов трассировки композиции.
- Как создать вызовы начала и окончания событий трассировки, которые можно комбинировать
- Добавлен метод ComposerKt.traceEventStart(Int, String)
Composable Reflection APIs
- Добавлен новый API
ComposableMethod, который позволяет более надежно вызывать composable-функции на основе рефлексии. - Перенос invokeComposable в среду выполнения Compose
- Переработка API для вызова composable-функции
Исправления во время выполнения
- Исправлена ошибка в проверке диапазона для таблицы слотов при поиске маркеров
- Разрешить перемещение контента в SubcomposeLayout и из него
- Исправлена ошибка, из-за которой не удавалось переместить контент в новый контент вложенной композиции
Система создания снимков
- В систему создания снимков внесены различные улучшения, связанные с управлением памятью, производительностью и корректностью.
- Оптимизация удаления области в SnapshotStateObserver
- Удаление вложенных снимков, созданных из прозрачных снимков
- Исправлена ошибка, связанная с состоянием гонки при чтении состояния из глобального снимка
- Поддержка DerivedState в SnapshotStateObserver
- Предотвращение удаления производного состояния из композиции, когда оно считывается в других областях
- Используйте IdentityArrayMap вместо HashMap в DerivedState
- Как обновить наблюдателей производного состояния, чтобы они использовали изменяемый вектор
- Обновление очистки состояния SnapshotStateObserver
- Замена SnapshotStateObserver.invalidated на ArraySet
- Исправлена ошибка, связанная с состоянием гонки при чтении состояния из глобального снимка
- Исправлена ошибка, связанная с использованием устаревшей записи при вычислении хеша DerivedState
- Устранение состояния гонки при переходе к следующему глобальному снимку
- Ускорение очистки наблюдений за областью действия в SnapshotStateObserver
Версия 1.3.0-rc01
5 октября 2022 г.
Выход androidx.compose.runtime:runtime-*:1.3.0-rc01. Версия 1.3.0-rc01 содержит следующие коммиты:
Исправление ошибок
- Исправлена ошибка
ArrayIndexOutOfBoundsException, связанная с таблицей слотов (b/249076084)
Версия 1.3.0-beta03
21 сентября 2022 г.
Выход androidx.compose.runtime:runtime-*:1.3.0-beta03. Версия 1.3.0-beta03 содержит следующие коммиты:
Изменение поведения
- Параметры
rememberиrememberCoroutineScopeбыли изменены наcrossinline. В этом случае при досрочном возврате будет сообщаться об ошибке, а не допускаться досрочный возврат, который приведет к внутренней ошибке позже. - Это изменение может привести к появлению новых ошибок компилятора, требующих удаления нелокальных возвратов из лямбда-выражений, переданных этим функциям. (Ibea62)
Версия 1.3.0-beta02
7 сентября 2022 г.
Выход androidx.compose.runtime:runtime-*:1.3.0-beta02. Версия 1.3.0-beta02 содержит следующие коммиты:
Исправление ошибок
- Обновленный API (I64ca0)
Версия 1.3.0-beta01
24 августа 2022 г.
Выход androidx.compose.runtime:runtime-*:1.3.0-beta01. Версия 1.3.0-beta01 содержит следующие коммиты:
Изменения в API
- В
CompositionDataдобавлен методfind, который позволяет инструментам разработчика, использующим этот API, быстро находить подгруппу композиции по ее идентификатору. (I5794f)
Версия 1.3.0-alpha03
10 августа 2022 г.
Выход androidx.compose.runtime:runtime-*:1.3.0-alpha03. Версия 1.3.0-alpha03 содержит следующие коммиты:
Версия 1.3.0-alpha02
27 июля 2022 г.
Выход androidx.compose.runtime:runtime-*:1.3.0-alpha02. Версия 1.3.0-alpha02 содержит следующие коммиты:
Изменения в API
- Добавлен тег
ComposerKt.traceEventStart(Int, String)для обратной совместимости (I6e6de).
Версия 1.3.0-alpha01
29 июня 2022 г.
Выход androidx.compose.runtime:runtime-*:1.3.0-alpha01. Версия 1.3.0-alpha01 содержит следующие коммиты:
Изменения в API
- Перенос функций утилиты в среду выполнения (I4f729)
Версия 1.2
Версия 1.2.1
10 августа 2022 г.
Выход androidx.compose.runtime:runtime-*:1.2.1. Версия 1.2.1 содержит следующие коммиты:
Исправление ошибок
- Устранена утечка памяти: удаление вложенных снимков, созданных из прозрачных снимков b/239603305
Версия 1.2.0
27 июля 2022 г.
Выход androidx.compose.runtime:runtime-*:1.2.0. Версия 1.2.0 содержит следующие коммиты:
Важные изменения с 1.1.0
В версии 1.2.0 среды выполнения Compose появилось несколько новых функций и было исправлено множество ошибок. Самым значительным нововведением стало представление
movableContentOfAPI, который можно использовать для создания сложных элементов интерфейса, например переходов между общими элементами.movableContentOfAPI преобразует composable-функцию в лямбда-функцию, которая перемещает ее состояние и соответствующие узлы в любое новое место, где она вызывается. Когда предыдущий звонок покидает композицию, его состояние временно сохраняется. Если в композицию поступает новый звонок к функции Lambda, состояние и связанные с ним узлы перемещаются в местоположение нового звонка. Если новый звонок не добавлен, состояние удаляется навсегда и наблюдатели получают уведомление.Если лямбда-функция
movableContentOfвызывается несколько раз в одной композиции, для каждого вызова создаются новые состояния и узлы. Когда вызовы покидают композицию и в нее входят новые, состояние передается от первых уходящих вызовов к входящим в порядке их вызова. Все данные, не относящиеся к новым вызовам, удаляются без возможности восстановления.Помимо этого и нескольких других новых функций, мы потратили много времени на стабилизацию системы состояния среды выполнения и снимков. Устранены утечки памяти и оптимизированы пути выполнения кода.
Ниже приведен краткий список изменений.
Новые функции в 1.2
- Добавление экспериментального снимка unsafeEnter/Leave
- Добавление экспериментального API Snapshot.asContextElement
- Представляем Snapshot.withoutReadObservation
- Разрешить перемещение состояния в рамках композиции
- Отслеживание перекомпоновки в Compose
Эффективность в 1.2
- Как повысить эффективность композиции
- Базовые профили для Compose должны создаваться на основе контрольных показателей
Исправление ошибок в 1.2
- Удаление информации об отслеживании из областей перекомпоновки релизов
- Предотвращение удаления производного состояния из композиции, когда оно считывается в других областях
- Используйте более эффективный метод removeScope() в SnapshotStateObserver
- Как удалить зависимости производного состояния в композиции
- Исправлена проблема с изменением currentCompositeKeyHash после внутренней рекомпозиции в перемещаемом контенте
- Удаление недействительных композиций
- Исправлена ошибка, связанная с чтением производного состояния во время перекомпоновки
- Устранена утечка памяти при наблюдении за объектами производного состояния
- Исправлена ошибка, из-за которой хеш-ключ составного объекта movableContent был непоследовательным
- Исправлена ошибка, из-за которой при определенных условиях происходил сбой в работе редактора
- Как убедиться, что принудительное аннулирование группы приводит к повторной композиции
- Исправлена ошибка, из-за которой при восстановлении rememberSaveable с входными данными порядок был неправильным
Версия 1.2.0-rc03
29 июня 2022 г.
Выход androidx.compose.runtime:runtime-*:1.2.0-rc03. Версия 1.2.0-rc03 содержит следующие коммиты:
Исправление ошибок
- Ранее наблюдения за производным состоянием безусловно удалялись из области повторной композиции и композиции, что нарушало работу других областей, которые могли по-прежнему наблюдать за производным состоянием. Это изменение удаляет экземпляры производного состояния, только если они больше не наблюдаются другими областями. (b/236618362)
Версия 1.2.0-rc02
22 июня 2022 г.
Выход androidx.compose.runtime:runtime-*:1.2.0-rc02. Версия 1.2.0-rc02 содержит следующие коммиты:
Версия 1.2.0-rc01
15 июня 2022 г.
Выход androidx.compose.runtime:runtime-*:1.2.0-rc01. Версия 1.2.0-rc01 содержит следующие коммиты:
Изменения в API
- Интерфейсы в библиотеках Compose теперь создаются с помощью методов интерфейса по умолчанию из JDK8 (I5bcf1).
Версия 1.2.0-beta03
1 июня 2022 г.
Выход androidx.compose.runtime:runtime-*:1.2.0-beta03. Версия 1.2.0-beta03 содержит следующие коммиты:
Версия 1.2.0-beta02
18 мая 2022 г.
Выход androidx.compose.runtime:runtime-*:1.2.0-beta02. Версия 1.2.0-beta02 содержит следующие коммиты:
Версия 1.2.0-beta01
11 мая 2022 г.
Выход androidx.compose.runtime:runtime-*:1.2.0-beta01. Версия 1.2.0-beta01 содержит следующие коммиты:
Новые функции
- Это первая бета-версия 1.2.
Изменения в API
- Добавлено экспериментальное поле
Snapshot.unsafeEnter/unsafeLeave(I108f3). - Добавлен экспериментальный API
Snapshot.asContextElement()(Iff072). - Аннотацию
@ComposableTargetи аннотации, отмеченные символом@ComposableTargetMarker, теперь можно использовать на уровне файла, добавив префикс@file. Если использовать целевую аннотацию в области действия файла, компилятор будет считать, что все функции, которые можно составить, в файле предназначены для связанного прикладного объекта. Например, при использовании@file:UiComposableобъявляется, что все функции@Composableпредназначены для приложения Compose UI. Функция, которая должна быть применена к другому приложению, должна явно указать аннотацию маркера цели для нужного приложения. (I40804)
Версия 1.2.0-alpha08
20 апреля 2022 г.
Выход androidx.compose.runtime:runtime-*:1.2.0-alpha08. Версия 1.2.0-alpha08 содержит следующие коммиты:
Изменения в API
- В интерфейс
CompositionTracerдобавлен элементTracingInProgress. (Ic6f12) - Добавьте
recomposeScopeIdentityв Composer (I0c873) - Ограничен доступ к API трассировки (Composer.setTracer) для
OptIn(InternalComposeTracingApi). (I9187f) - Добавлен тег
ResuableContentHost, который позволяет лучше контролировать срок действия состояния, созданного для многократно используемого контента. Например, если вложенная композиция временно не используется, ее контент можно деактивировать. В результате все сохраненные состояния в композиции будут забыты, что приведет, например, к удалению всех временных эффектов. (I2c0f2, b/220322704)
Версия 1.2.0-alpha07
6 апреля 2022 г.
Выход androidx.compose.runtime:runtime-*:1.2.0-alpha07. Версия 1.2.0-alpha07 содержит следующие коммиты:
Изменения в API
- Добавлена новая функция
Snapshot.withoutReadObservation { ... }. Он позволяет пользователям запускать переданную лямбда-функцию, не подписываясь на изменения значений состояния, прочитанных во время этого блока. Это может быть полезно, когда вам нужно использовать безопасные для потоков операции чтения и записи на основе моментальных снимков, но при этом вы хотите иметь возможность читать значение, не вызывая ненужных повторных композиций или измерений. (I9f365, b/214054486)
Версия 1.2.0-alpha06
23 марта 2022 г.
Выход androidx.compose.runtime:runtime-*:1.2.0-alpha06. Версия 1.2.0-alpha06 содержит следующие коммиты:
Версия 1.2.0-alpha05
9 марта 2022 г.
Выход androidx.compose.runtime:runtime-*:1.2.0-alpha05. Версия 1.2.0-alpha05 содержит следующие коммиты:
Внешний вклад
- Обновлено до Kotlinx coroutines 1.6.0 (I3366d)
Версия 1.2.0-alpha04
23 февраля 2022 г.
Выход androidx.compose.runtime:runtime-*:1.2.0-alpha04. Версия 1.2.0-alpha04 содержит следующие коммиты:
Изменения в API
Добавлены функции
ComposableTarget,ComposableTargetMarkerиComposableOpenTarget, которые позволяют во время компиляции сообщать о том, что composable-функция вызывается с применением к объекту, для которого она не предназначена.В большинстве случаев аннотации можно получить с помощью плагина компилятора Compose, поэтому использовать их напрямую нужно редко . К случаям, когда вывод невозможен, относятся создание и использование специального прикладного модуля, абстрактные функции composable (например, методы интерфейса), поля или глобальные переменные, которые являются composable-лямбдами (локальные переменные и параметры выводятся), или использование
ComposeNodeили связанных функций composable.Для пользовательских функций, вызывающих
ComposeNodeилиReusableComposeNode, необходимо добавить аннотациюCompoableTargetдля функции и всех типов параметров компонуемой лямбда-функции. Однако мы рекомендуем создать аннотацию, которая будет отмечена символомComposableTargetMarker, а затем использовать эту аннотацию вместо символаComposableTarget. Составная composable-функция, отмеченная символомComposableTargetMarker, эквивалентна аннотацииComposbleTargetс полным именем класса атрибута в качестве параметра applier. Пример использования свойстваComposableTargetMarkerприведен в описании типаanroidx.compose.ui.UiComposable. (I38f11)
Версия 1.2.0-alpha03
9 февраля 2022 г.
Выход androidx.compose.runtime:runtime-*:1.2.0-alpha03. Версия 1.2.0-alpha03 содержит следующие коммиты:
Изменения в API
Добавлен метод
movableContentOf, который преобразует composable-функцию в лямбда-функцию, перемещающую ее состояние и соответствующие узлы в любое новое место, где она вызывается. Когда предыдущий звонок покидает композицию, состояние временно сохраняется. Если в композицию поступает новый звонок к лямбда-функции, состояние и связанные с ним узлы перемещаются в местоположение нового звонка. Если новый вызов не добавлен, состояние удаляется навсегда и наблюдатели получают уведомление.Если лямбда-функция
movableContentOfвызывается несколько раз в одной композиции, для каждого вызова создаются новые состояния и узлы. Когда вызовы покидают композицию и в нее входят новые, состояние передается от первых к последним в порядке вызова. Все состояния, не заявленные новыми вызовами, удаляются без возможности восстановления. (Ib4850)Добавлен API трассировки для композиции, чтобы инструменты могли предоставлять более подробную трассировку композиционных функций. Теперь компилятор генерирует вызовы API трассировки, которые включают информацию об источнике. (Ib0eb5)
Чтобы удалить эти вызовы и связанную с ними информацию об источнике из конечной сборки, добавьте следующее правило Proguard:
-assumenosideeffects public class androidx.compose.runtime.ComposerKt { boolean isTraceInProgress(); void traceEventStart(int,java.lang.String); void traceEventEnd(); }Добавьте
InternalComposeScope, чтобы инструменты могли определять composable-функцию во время рекомпозиции. (I07a3f)
Версия 1.2.0-alpha02
26 января 2022 г.
Выход androidx.compose.runtime:runtime-*:1.2.0-alpha02. Версия 1.2.0-alpha02 содержит следующие коммиты:
Версия 1.2.0-alpha01
12 января 2022 г.
Выход androidx.compose.runtime:runtime-*:1.2.0-alpha01. Версия 1.2.0-alpha01 содержит следующие коммиты:
Изменения в API
- В файл
CompositionDataдобавлено полеidentityдля создания неизменных идентификаторов в инспекторе макетов. (Ic116e)
Обновления зависимостей
- Теперь зависит от Kotlin
1.6.10.
Версия 1.1
Версия 1.1.1
23 февраля 2022 г.
Выход androidx.compose.runtime:runtime-*:1.1.1. Версия 1.1.1 содержит следующие коммиты:
Исправление ошибок
- Исправлена ошибка
NullPointerExceptionвandroidx.compose.ui.platform.RenderNodeLayer.updateDisplayList(aosp/1947059, b/206677462) - Исправлен сбой, вызванный содержимым буфера обмена при чтении из него на устройстве Android. (I06020, b/197769306)
- Исправлена поддержка письма справа налево в
LazyVerticalGrid(aosp/1931080, b/207510535).
Версия 1.1.0
9 февраля 2022 г.
Выход androidx.compose.runtime:runtime-*:1.1.0. Версия 1.1.0 содержит следующие коммиты:
Важные изменения с версии 1.0.0
- Стабильная поддержка эффекта достижения конца прокрутки в Android 12
- Улучшения в определении размера области прикосновения
- Обратите внимание, что в Compose 1.0 компоненты Material будут расширять пространство макета в соответствии с рекомендациями по обеспечению доступности для размера интерактивных элементов. Например, область прикосновения кнопки будет расширена до минимального размера
48x48dp, даже если вы зададите меньший размер кнопки. Это позволяет обеспечить согласованное поведение компонентов Material Design и Compose Material при их совместном использовании. Это изменение также гарантирует, что при создании интерфейса с помощью компонентов Compose Material будут соблюдены минимальные требования к доступности областей прикосновения. - Стабильная поддержка боковой панели навигации
- Несколько экспериментальных API переведены в стабильную версию.
- Поддержка более новых версий Kotlin
Версия 1.1.0-rc03
26 января 2022 г.
Выход androidx.compose.runtime:runtime-*:1.1.0-rc03. Версия 1.1.0-rc03 содержит следующие коммиты:
Исправление ошибок
- Добавлена поддержка Compose Material
1.1.0-rc03
Версия 1.1.0-rc01
15 декабря 2021 г.
Выход androidx.compose.runtime:runtime-*:1.1.0-rc01. Версия 1.1.0-rc01 содержит следующие коммиты:
Версия 1.1.0-beta04
1 декабря 2021 г.
Выход androidx.compose.runtime:runtime-*:1.1.0-beta04. Версия 1.1.0-beta04 содержит следующие коммиты:
Новые функции
- Обновлено для совместимости с Kotlin
1.6.0
Версия 1.1.0-beta03
17 ноября 2021 г.
Выход androidx.compose.runtime:runtime-*:1.1.0-beta03. Версия 1.1.0-beta03 содержит следующие коммиты:
Версия 1.1.0-beta02
3 ноября 2021 г.
Выход androidx.compose.runtime:runtime-*:1.1.0-beta02. Версия 1.1.0-beta02 содержит следующие коммиты.
Изменения в API
- Код снимка был разбит на несколько файлов, но все они по-прежнему находятся в одном классе JVM. (Ic6c98)
Версия 1.1.0-beta01
27 октября 2021 г.
Выход androidx.compose.runtime:runtime-*:1.1.0-beta01. Версия 1.1.0-beta01 содержит следующие коммиты:
Версия 1.1.0-alpha06
13 октября 2021 г.
Выход androidx.compose.runtime:runtime-*:1.1.0-alpha06. Версия 1.1.0-alpha06 содержит следующие коммиты:
Изменения в API
- Удален метод
InternalCompilerApiиз методов Composer, которые должны вызываться между модулями (I1aa0b). Recomposer.stateустарел и был заменен наRecomposer.currentState, чтобы изменить его тип на StateFlow (Ic2ab3, b/197773820).
Версия 1.1.0-alpha05
29 сентября 2021 г.
Выход androidx.compose.runtime:runtime-*:1.1.0-alpha05. Версия 1.1.0-alpha05 содержит следующие коммиты:
Версия 1.1.0-alpha04
15 сентября 2021 г.
Выход androidx.compose.runtime:runtime-*:1.1.0-alpha04. Версия 1.1.0-alpha04 содержит следующие коммиты:
Версия 1.1.0-alpha03
1 сентября 2021 г.
Выход androidx.compose.runtime:runtime-*:1.1.0-alpha03. Версия 1.1.0-alpha03 содержит следующие коммиты.
Новые функции
- Компилятор Compose теперь поддерживает более ранние версии среды выполнения Compose (1.0). До этого изменения Компилятор Compose был совместим только со средой выполнения Compose той же или более поздней версии. После этого изменения компилятор Compose стал совместим с более ранней версией среды выполнения Compose (1.0). (aosp/1796968)
- Обновлена зависимость Compose
1.1.0-alpha03от Kotlin1.5.30. (I74545)
Версия 1.1.0-alpha02
18 августа 2021 г.
Выход androidx.compose.runtime:runtime-*:1.1.0-alpha02. Версия 1.1.0-alpha02 содержит следующие коммиты:
Версия 1.1.0-alpha01
4 августа 2021 г.
Выход androidx.compose.runtime:runtime-*:1.1.0-alpha01. Версия 1.1.0-alpha01 содержит следующие коммиты:
Версия 1.0
Версия 1.0.5
3 ноября 2021 г.
Выход androidx.compose.runtime:runtime-*:1.0.5. Версия 1.0.5 содержит следующие коммиты:
Исправление ошибок
- Исправлена ошибка отслеживания сбоев, связанных с экземплярами derivedStateOf. (aosp/1792247)
Версия 1.0.4
13 октября 2021 г.
Выход androidx.compose.runtime:runtime-*:1.0.4. Версия 1.0.4 содержит следующие коммиты:
Обновления зависимостей
- Обновлена зависимость от Kotlin
1.5.31
Версия 1.0.3
29 сентября 2021 г.
Выход androidx.compose.runtime:runtime-*:1.0.3. Версия 1.0.3 содержит следующие коммиты:
Обновления зависимостей
- Обновлена зависимость от Kotlin
1.5.30
Версия 1.0.2
1 сентября 2021 г.
Выход androidx.compose.runtime:runtime-*:1.0.2. Версия 1.0.2 содержит следующие коммиты:
Добавлена поддержка версии Compose 1.0.2. Compose 1.0.2 по-прежнему совместим с Kotlin 1.5.21.
Версия 1.0.1
4 августа 2021 г.
Выход androidx.compose.runtime:runtime-*:1.0.1. Версия 1.0.1 содержит следующие коммиты:
Обновления зависимостей
- Обновлена зависимость от Kotlin
1.5.21.
Версия 1.0.0
28 июля 2021 г.
Выход androidx.compose.runtime:runtime-*:1.0.0. Версия 1.0.0 содержит следующие коммиты:
Основные функции версии 1.0.0
Это первый стабильный выпуск Compose. Подробную информацию можно найти в официальном блоге Compose Release.
Известные проблемы
Если вы используете Android Studio Bumblebee Canary 4 или AGP
7.1.0-alpha04/7.1.0-alpha05, может произойти сбой:java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"Чтобы устранить проблему, временно увеличьте значение minSdkVersion до 24 или выше в файле
build.gradle. Эта проблема будет устранена в следующей версии Android Studio Bumblebee и AGP7.1. (b/194289155)
Версия 1.0.0-rc02
14 июля 2021 г.
Выход androidx.compose.runtime:runtime-*:1.0.0-rc02. Версия 1.0.0-rc02 содержит следующие коммиты:
- Устранены состояния гонки в SnapshotStateObserver, вызывающие спорадические исключения NullPointerException. (aosp/1763445, aosp/1758105, b/192677711)
- Устранены проблемы со снимками состояния во время выполнения, которые приводили к сбоям
java.lang.IllegalStateException: Reading a state that was created after the snapshot was taken or in a snapshot that has not yet been applied. (b/193006595, b/192570897)
Версия 1.0.0-rc01
1 июля 2021 г.
Выход androidx.compose.runtime:runtime-*:1.0.0-rc01. Версия 1.0.0-rc01 содержит следующие коммиты:
Версия 1.0.0-beta09
16 июня 2021 г.
Выход androidx.compose.runtime:runtime-*:1.0.0-beta09. Версия 1.0.0-beta09 содержит следующие коммиты:
Добавлены правила для профилей
В этом выпуске в следующие модули Compose добавлены правила профиля (I14ed6):
- androidx.compose.animation
- androidx.compose.animation-core
- androidx.compose.foundation
- androidx.compose.foundation-layout
- androidx.compose.material
- androidx.compose.material-ripple
- androidx.compose.runtime
- androidx.compose.ui
- androidx.compose.ui.geometry
- androidx.compose.ui.graphics
- androidx.compose.ui.text
- androidx.compose.ui.text
- androidx.compose.ui.unit
- androidx.compose.ui.util
Что такое правила профиля
Правила профиля для библиотеки указываются в текстовом файле
baseline-prof.txt, расположенном в каталогеsrc/mainили аналогичном. В файле каждое правило указывается в отдельной строке. Правило представляет собой шаблон для сопоставления с методами или классами в библиотеке. Синтаксис этих правил представляет собой надмножество понятного для человека формата профиля ART, который используется при работе сadb shell profman --dump-classes-and-methods .... Эти правила могут быть двух типов: для методов и для классов.Правило для метода будет иметь следующий формат:
<FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>Правило для класса будет иметь следующий формат:
<CLASS_DESCRIPTOR>Здесь
<FLAGS>– один или несколько символовH,SиP, указывающих, следует ли отмечать этот метод как "Горячий", "Запуск" или "После запуска".<CLASS_DESCRIPTOR>– дескриптор класса, к которому относится целевой метод. Например, для классаandroidx.compose.runtime.SlotTableдескриптор будетLandroidx/compose/runtime/SlotTable;.<METHOD_SIGNATURE>– это сигнатура метода, которая включает название, типы параметров и типы возвращаемых значений метода. Например, методfun isPlaced(): BooleanвLayoutNodeимеет сигнатуруisPlaced()Z.В этих шаблонах можно использовать подстановочные знаки (
**,*и?), чтобы одно правило охватывало несколько методов или классов.
Что делают правила
Метод, отмеченный флагом
H, является "горячим" и должен быть скомпилирован заранее.Метод с флагом
Sуказывает на то, что он вызывается при запуске и должен быть скомпилирован заранее, чтобы избежать затрат на компиляцию и интерпретацию метода во время запуска.Метод с флагом
Pвызывается после запуска.Класс, указанный в этом файле, используется при запуске и должен быть предварительно выделен в куче, чтобы избежать затрат на загрузку класса.
Как это работает?
- Библиотеки могут определять эти правила, которые будут упакованы в артефакты AAR. Когда приложение, включающее эти артефакты, будет создано, правила будут объединены и использованы для создания компактного двоичного профиля ART, относящегося к приложению. Затем ART может использовать этот профиль при установке приложения на устройства, чтобы заранее скомпилировать определенное подмножество приложения и повысить его производительность, особенно при первом запуске. Обратите внимание, что это не повлияет на приложения с возможностью отладки.
Версия 1.0.0-beta08
2 июня 2021 г.
Выход androidx.compose.runtime:runtime-*:1.0.0-beta08. Версия 1.0.0-beta08 содержит следующие коммиты:
Изменения в API
State<T>теперь называетсяState<out T>(I69049)ControlledCompositionИзменение API, позволяющее перекомпоновать изменения за один проход. (Iaafd1, b/184173932)
Версия 1.0.0-beta07
18 мая 2021 г.
Выход androidx.compose.runtime:runtime-*:1.0.0-beta07. Версия 1.0.0-beta07 содержит следующие коммиты.
Изменения в API
- Добавлены новые API компилятора Compose, которые позволяют удалять информацию об источнике, сгенерированную компилятором, во время минимизации исходного кода. (Ia34e6)
Добавлен параметр
ReusableContent, который позволяет повторно использовать узлы в контенте вместо того, чтобы заменять их при изменении ключа. Если изменить ключ, предыдущие значения в таблице слотов для контента будут проигнорированы, за исключением сгенерированных узлов и значений, использованных для обновления узлов.Добавлен метод
ReusableComposeNode, который позволяет повторно использовать сгенерированный узел, а не заменять его, как это делается в методеComposeNode. (I1dd86)@ComposeCompilerApiбольше не@RequiresOptIn(Iab690)
Исправление ошибок
- LazyColumn/Row теперь сохраняет до двух ранее видимых элементов активными (не удаляет), даже если они уже прокручены. Это позволяет компоненту повторно использовать активные вложенные композиции при создании нового элемента, что повышает эффективность прокрутки. (Ie5555)
Версия 1.0.0-beta06
5 мая 2021 г.
Выход androidx.compose.runtime:runtime-*:1.0.0-beta06. Версия 1.0.0-beta06 содержит следующие коммиты.
Изменения в API
@ComposeCompilerApiбольше не@RequiresOptIn(Iab690)
Версия 1.0.0-beta05
21 апреля 2021 г.
Выход androidx.compose.runtime:runtime-*:1.0.0-beta05. Версия 1.0.0-beta05 содержит следующие коммиты:
Изменения в API
- Удален чип
@InternalComposeApiдля чтения и записи снимков записи (Id134d)
Исправление ошибок
- Файлы AndroidManifest из ui-test-manifest и ui-tooling-data теперь совместимы с Android 12 (I6f9de, b/184718994).
Версия 1.0.0-beta04
7 апреля 2021 г.
Выход androidx.compose.runtime:runtime-*:1.0.0-beta04. Версия 1.0.0-beta04 содержит следующие коммиты.
Исправление ошибок
До этого изменения локальные функции, состоящие из нескольких частей, можно было пропустить на основе их параметров. После этого изменения ни одна локальная функция, поддерживающая композицию, не будет пропускаться. Это изменение было внесено, поскольку локальные функции часто и ожидаемо получают параметры от родительского элемента, а их пропуск является распространенным источником ошибок.
Рассмотрим пример:
@Composable fun Counter(count: Int, onCountChange: (Int) -> Unit) { @Composable fun ShowCount() { Text("Count: $count") } ShowCount() Button(onClick={ onCountChange(count + 1) }) { Text("Increment") } }До этого изменения composable-функция
ShowCountвсегда пропускалась, даже после обновления параметраcount. Однако с тех пор мы пересмотрели свое решение. (I5648a)Исправлена проблема, из-за которой правило
rememberSaveable()восстанавливало старое значение при использовании с входными параметрами (I1b110, b/182403380).
Версия 1.0.0-beta03
24 марта 2021 г.
Выход androidx.compose.runtime:runtime-*:1.0.0-beta03. Версия 1.0.0-beta03 содержит следующие коммиты:
Изменения в API
DefaultMonotonicFrameClockбольше не поддерживается. При вызовеwithFrameNanosилиRecomposer.runRecomposeAndApplyChangesбезMonotonicFrameClockбудет возвращаться ошибкаIllegalStateException. (I4eb0d)
Версия 1.0.0-beta02
10 марта 2021 г.
Выход androidx.compose.runtime:runtime-*:1.0.0-beta02. Версия 1.0.0-beta02 содержит следующие коммиты:
Исправление ошибок
- Внедрение ограничений на общедоступное использование экспериментальных API (I6aa29, b/174531520)
- Исправлена ошибка, из-за которой не работал элемент
rememberSaveable { mutableStateOf(0) }, если он использовался в целевом элементе навигации Compose. (I1312b, b/180042685, b/180701630)
Версия 1.0.0-beta01
24 февраля 2021 г.
Выход androidx.compose.runtime:runtime-*:1.0.0-beta01. Версия 1.0.0-beta01 содержит следующие коммиты:
Это первый выпуск Compose 1.0.0 Beta.
Изменения в API
- Добавлен экспериментальный API для повторной композиции недействительных композиций вне основного цикла кадров.
Recomposer.runRecomposeConcurrentlyAndApplyChanges(I342d0) - Теперь все функции, отмеченные аннотацией @ReadOnlyComposable, проверяются во время компиляции, чтобы убедиться, что они вызывают только другие функции с аннотацией @ReadOnlyComposable (I58961).
defaultFactoryдляcompositionLocalOfиstaticCompositionLocalOfтеперь обязателен, а не необязателен.Это изменение устраняет потенциальную ошибку типа для типов, допускающих значение NULL, для которых не был предоставлен заводской метод по умолчанию. Раньше в этом случае для типа, допускающего значение NULL, возвращалась бы нулевая ссылка.
Для типов, допускающих значение NULL, в качестве фабрики по умолчанию рекомендуется использовать
{ null }.Мы не рекомендуем использовать локальные переменные с типами, допускающими значение NULL, если не удается задать разумное значение по умолчанию. Если подходящего значения по умолчанию нет, лямбда-функция
defaultFactoryдолжна выдать исключение. Однако при этом потребители локали будут неявно зависеть от ее предоставления, что не будет контролироваться системой типов. (Ifbd2a)Устаревшие символы были удалены из среды выполнения Compose (I3252c).
Удален устаревший параметр
emptyContent(). Используйте вместо него{}. (Idb33f, b/179432510)Компонент Providers переименован в CompositionLocalProvider.
- Конструктор Composition больше не принимает параметр key и считается устаревшим.
- currentCompositeKeyHash теперь является composable-свойством верхнего уровня, а не composable-функцией верхнего уровня.
- Объекты CompositionData и CompositionGroup перемещены в пространство имен androidx.compose.runtime.tooling
- ComposableLambda теперь является интерфейсом, а не классом, и больше не имеет параметров типа.
- ComposableLambdaN теперь является интерфейсом, а не конкретным классом, и больше не имеет параметров типа.
- Функция snapshotFlow перенесена в пространство имен androidx.compose.runtime
- Метод слияния SnapshotMutationPolicy больше не является экспериментальным.
- Удалена функция clearRoots верхнего уровня с аннотацией @TestOnly. Он больше не нужен.
- Удалены функции keySourceInfoOf и resetSourceInfo. Они больше не нужны.
- Функция Composer.collectKeySourceInformation удалена. Он больше не нужен.
- Удалены методы isJoinedKey, joinedKeyLeft и joinedKeyRight. Они больше не нужны.
- Различные API верхнего уровня были перемещены и реорганизованы в другие файлы. Из-за семантики класса файла Kotlin это нарушит совместимость на уровне двоичного кода, но не на уровне исходного кода, поэтому для большинства пользователей проблем не возникнет.
- (I99b7d, b/177245490)
SnapshotStateObserver больше не является экспериментальной функцией (Id2e6a)
Удалены некоторые ранее устаревшие API (Ice5da, b/178633932).
В Material API внесены следующие изменения:
- В Top/BottomAppBar добавлен параметр contentPadding, позволяющий настраивать отступы по умолчанию.
- Параметры в BackdropScaffold были переупорядочены в соответствии с рекомендациями API, согласно которым обязательные параметры должны идти перед необязательными.
- Параметр
iconв BottomNavigationItem перемещен послеselectedиonClick. - Параметр
alwaysShowLabelsв BottomNavigationItem переименован вalwaysShowLabel. - В некоторых компонентах параметры
bodyContentбыли переименованы вcontent. - Параметры в
ButtonDefaults.buttonColors()переставлены местами. Обратите внимание, что тип параметров не изменился, поэтому в коде не возникнет ошибок. Однако вам нужно будет вручную изменить порядок параметров или использовать именованные параметры, иначе код будет работать не так, как раньше. - В
darkColors()добавлен параметрsecondaryVariant. Обычно этот цвет совпадает с цветомsecondaryв темной теме, но мы добавили его для единообразия и возможности дальнейшей настройки. - Из общедоступного API удалены ElevationDefaults и animateElevation(), поскольку они не пользовались популярностью.
- Поле
onValueChangeEndвSliderпереименовано вonValueChangeFinishedи стало допускать нулевые значения. - Параметр
textвSnackbarпереименован вcontentдля единообразия. - Добавлен параметр
contentPaddingвDropdownMenuItem, чтобы можно было настраивать отступы по умолчанию, аcontentстал расширениемRowScope. - Название "
ModalDrawerLayout" изменено на "ModalDrawer". - Название "
BottomDrawerLayout" изменено на "BottomDrawer". - (I1cc66)
Версия 1.0.0-alpha12
10 февраля 2021 г.
Выход androidx.compose.runtime:runtime-*:1.0.0-alpha12. Версия 1.0.0-alpha12 содержит следующие коммиты:
Изменения в API
- Из UiApplier удалена поддержка ViewGroups. Удалены устаревшие функции emitView. (Ifb214)
- Элемент CompositionReference переименован в CompositionContext (I53fcb).
- Метод ComponentActivity.setContent перенесен в androidx.activity.compose.setContent в модуле androidx.activity:activity-compose. (Icf416)
- Мы обновили Snapshot API, чтобы он лучше соответствовал рекомендациям по работе с API и чтобы скрыть классы внутренней реализации из общедоступного API. (Id9e32)
- Переименованы объекты Ambients в соответствии с переименованием Ambient -> CompositionLocal. Раньше объекты Ambients назывались AmbientFoo, а теперь объекты CompositionLocals называются LocalFoo. (I2d55d)
- Параметр Ambient переименован в CompositionLocal, а ambientOf и staticAmbientOf – в compositionLocalOf и staticCompositionLocalOf соответственно. Это изменение поможет сделать назначение CompositionLocal более понятным: это механизм для предоставления и получения значений, локальных для композиции. Экземпляры CompositionLocal должны иметь префикс
Local, например val LocalFoo = compositionLocalOf { Foo() }. (Ia55b6) - takeMutableSnapshot и takeSnapshot теперь являются сопутствующими методами Snapshot. (I91f19)
Аннотация
@ComposableContractбольше не поддерживается. Вместо нее можно использовать три более точных аннотации.@ComposableContract(restartable = false)стал@NonRestartableComposable.@ComposableContract(readonly = true)стал@ReadOnlyComposable.@ComposableContract(preventCapture = true)стал@DisallowComposableCalls.@ComposableContract(tracked = true)удален. (I60a9d)Утилиты emptyContent() и (@Composable () -> Unit).orEmpty() устарели, поскольку больше не влияют на производительность (I0484d).
snapshotFlowиwithMutableSnapshotбольше не являются экспериментальными функциями (I6a45f)Теперь можно закрывать окна с перекомпоновкой. Закрытые рекомпоновщики продолжат рекомпозицию, пока не завершатся дочерние сопрограммы. Функция Recomposer.shutDown переименована в cancel, чтобы отличать ее от функции close. (Ib6d76)
Объект
compose:runtime-dispatchбольше не поддерживается. MonotonicFrameClock теперь находится в compose:runtime, а AndroidUiDispatcher – в compose:ui. (Ib5c36)API, на который ориентирован плагин компилятора Compose, был переработан. Теперь вместо конкретного класса используется интерфейс. Кроме того, в интерфейсе больше не используется параметр типа.
Это внутреннее изменение, которое не должно повлиять на совместимость исходного кода, но является критическим изменением для двоичного кода. (I3b922, b/169406779)
Добавлен SnapshotMutableState (Icfd03)
DisposableEffectDisposable переименован в DisposaleEffectResult (Ica7c6)
Удален Recomposer.current(). Теперь [Abstract]ComposeView по умолчанию создает Recomposer с областью действия окна лениво, используя ViewTreeLifecycleOwner для окна. Рекомпозиция и такты анимации на основе withFrameNanos приостанавливаются, когда останавливается жизненный цикл хоста. (I38e11)
Recomposer.runningRecomposers теперь предлагает глобальный StateFlow только для чтения RecomposerInfo для наблюдения за текущим состоянием композиции в процессе. Рекомендуем использовать этот API вместо Recomposer.current(), который теперь считается устаревшим. (If8ebe)
DisposableEffectDisposable переименован в DisposaleEffectResult (I3ea68)
Версия 1.0.0-alpha11
28 января 2021 г.
Выход androidx.compose.runtime:runtime-*:1.0.0-alpha11. Версия 1.0.0-alpha11 содержит следующие коммиты:
Изменения в API
- onCommit, onDispose и onActive устарели. Вместо них теперь используются API SideEffect и DisposableEffect (If760e).
- API emit() и все его перегрузки объявлены устаревшими и переименованы в ComposeNode. API идентичны, но имеют разные названия, чтобы соответствовать правилам именования Compose (I4137b).
- invalidate и compositionReference() теперь считаются устаревшими. Вместо них следует использовать currentRecomposeScope и rememberCompositionReference. (I583a8)
RememberObserver заменяет CompositionLifecycleObserver, который теперь считается устаревшим.
RememberObserver– это замена дляCompositionLifecycleObserverс измененной семантикой и переименованными методами. Переход на новый API можно выполнить автоматически для объектов, которые запоминаются только один раз. Это рекомендуемый подход. Однако если ссылка была упомянута в композиции несколько раз, функцияonRememberedвызывается для каждой ссылки, а функцияonEnter– только один раз.onEnterвызывался несколько раз, если объект использовался в подкомпозициях, таких какWithConstraintsиScaffold, поэтому однократный вызовonEnterне гарантировал надежность, и он был удален дляRememberObserver.RememberObserverдобавляетonAbandoned, который вызывается, если экземплярRememberObserverвозвращается из обратного вызова, переданного вremember, но не был сохранен в состоянии композиции и, следовательно, никогда не будет вызванonRemembered. Это может произойти, если исключение завершает композицию до ее завершения или композиция отбрасывается, поскольку состояние, для которого она создавалась, больше не является текущим или больше не требуется. Если экземплярRememberObserver, следующий за рекомендацией по использованию одной ссылки, отслеживает внешний ресурс, тоonForgottenиonAbandonedуказывают, что ресурс больше не нужен. Если объект отслеживает начало работы или выделение ресурсов вonRemembered,onAbandonedможно игнорировать, поскольку он не будет вызываться, если вызываетсяonRemembered. (I02c36)Не отмечайте функции
collectAsState()как встроенные (Ia73e4)
Исправление ошибок
- Компонент WithConstraints был переработан и переименован в BoxWithConstraints. Теперь он находится в foundation.layout. (I9420b, b/173387208)
- Использование TestCoroutineDispatcher при тестировании (I532b6)
Версия 1.0.0-alpha10
13 января 2021 г.
Выход androidx.compose.runtime:runtime-*:1.0.0-alpha10. Версия 1.0.0-alpha10 содержит следующие коммиты:
Критическое изменение
Реструктуризация внутреннего API компилятора позволяет объединять изменения узлов, созданных в результате композиции, в фазу "применить изменения" композиции после завершения всех функций
@Composable.Это изменение поведения, которое может повлиять на код приложения, поскольку узлы больше не доступны из внутренних и экспериментальных API до тех пор, пока не будут применены изменения. Обычно это можно обойти, заключив код с такими зависимостями в composable-функцию
SideEffect, чтобы отложить выполнение кода до тех пор, пока узлы не будут созданы и инициализированы. (I018da)
Изменения в API
- Добавлена возможность отслеживать, применил ли рекомпозитор изменения. (I1b3e2)
Расширение API [Abstract]ComposeView, чтобы разрешить повторное использование представлений на основе Compose, удаление их композиции и повторное создание позже. Добавлены API для установки и обнаружения Recomposer с областью действия окна и CompositionReference для создания дочерних композиций.
Добавьте ViewCompositionStrategy для настройки стратегии удаления композиции [Abstract]ComposeViews; по умолчанию удаление выполняется при отсоединении окна. (I860ab)
Исправление ошибок
- Теперь Recomposer предоставляет поток своего текущего состояния, позволяя отслеживать его активность и активность связанных эффектов. (Ifb2b9)
- Теперь доступ к событию keyEvent можно получить через keyEvent.nativeKeyEvent (I87c57, b/173086397).
Версия 1.0.0-alpha09
16 декабря 2020 г.
Выход androidx.compose.runtime:runtime-*:1.0.0-alpha09. Версия 1.0.0-alpha09 содержит следующие коммиты:
Изменения в API
Удалены SlotTable, SlotReader и SlotWriter из общедоступного API. Ранее они были помечены как InternalComposeAPI. Теперь они встроены в модуль создания писем.
Классы CompositionData и CompositionGroup были добавлены в качестве замены для ui-tooling API, чтобы извлекать информацию о композиции. Эти функции являются общедоступными, но не предназначены для использования вне API инструментов интерфейса, поскольку предоставляют необработанную информацию, которую интерпретирует API инструментов интерфейса (I31a9c).
Класс Applier больше не считается (Id85b0)
Интерфейс
Applierбыл изменен, чтобы упростить создание дерева снизу вверх, а не сверху вниз.Метод
insert()переименован вinsertTopDown().Добавлен новый метод
insertBottomUp().Приложение вставляет узлы в редактируемое дерево, используя
insertTopDown()илиinsertBottomUp()в зависимости от того, что работает лучше.Некоторые деревья, например
LayoutNodeиView, гораздо эффективнее строить снизу вверх, чем сверху вниз. До этого изменения для реализации подхода "снизу вверх" требовался стек вставок, который нужно было скопировать в каждый прикладной модуль, которому для повышения производительности требовалась конструкция "снизу вверх". ТеперьApplierпереопределяетinsertBottomUp(), чтобы создать дерево снизу вверх, аinsertTopDown()– чтобы создать дерево сверху вниз. (Icbdc2)Compose поддерживает геттеры свойств, которые могут создавать вызываемые объекты. Поддержка этой функции не прекратится, но изменится синтаксис объявления геттера свойства как @Composable.
Ранее для этого использовался следующий синтаксис:
@Composable val someProperty: Int get() = ...Теперь правильный синтаксис для этого – аннотировать геттер свойства:
val someProperty: Int @Composable get() = ...Оба варианта синтаксиса будут работать некоторое время, но в конечном итоге устаревший вариант будет приводить к ошибке компиляции. (Id9197)
Исправление ошибок
- AndroidOwner made internal (Ibcad0, b/170296980)
- Метод subcomposeInto(LayoutNode) стал внутренним (Id724a)
Версия 1.0.0-alpha08
2 декабря 2020 г.
Выход androidx.compose.runtime:runtime-*:1.0.0-alpha08. Версия 1.0.0-alpha08 содержит следующие коммиты:
Изменения в API
- Добавлена проверка lint для названий и позиций параметров лямбда-функций, чтобы обеспечить соответствие рекомендациям Compose.
Также некоторые API, в которых в качестве названия для лямбда-функции использовался символ
children, были перенесены наcontentв соответствии с проверкой и рекомендациями. (Iec48e) - Recomposer больше не принимает EmbeddingContext; необходимые зависимости планирования получаются из effectCoroutineContext. FrameManager больше не поддерживается. Интеграции с платформами должны инициализировать собственную обработку глобальных снимков. (I02369)
- Функция RestorableStateHolder.withRestorableState переименована в RestorableStateProvider (I66640)
Исправление ошибок
- Устаревшие функции Ambient с суффиксом
Ambientбыли заменены новыми свойствами с префиксом Ambient, соответствующими другим функциям Ambient и рекомендациям по использованию API Compose. (I33440) - Удаление старого модуля ui-test и его заглушек (I3a7cb)
Версия 1.0.0-alpha07
11 ноября 2020 г.
Выход androidx.compose.runtime:runtime-*:1.0.0-alpha07. Версия 1.0.0-alpha07 содержит следующие коммиты:
Новые функции
Изменения в API
- Аннотация
@UnionTypeбольше не поддерживается (I57cde) - Функция provideDefault была добавлена в качестве альтернативы функции provide для предоставления данных об окружении. Ее можно использовать, чтобы задавать значения, которые будут устанавливаться только в том случае, если значение окружения ещё не предоставлено. (Id6635, b/171024925)
- Для согласованности с API SideEffect и DisposableEffect LaunchedTask был переименован в LaunchedEffect. Чтобы поощрять использование лучших практик, запрещено использовать LaunchedEffect без параметров subject. (Ifd3d4)
- Теперь у класса Applier есть обратные вызовы onBeginChanges и onEndChanges, которые вызываются, когда Composer начинает или заканчивает применять изменения к дереву. При необходимости их можно использовать для пакетного управления ресурсами. (Icf476)
- Теперь при создании Recomposer требуется CoroutineContext (Ic4610)
- Изменения во внутренней реализации SlotTable, которые не должны повлиять на общедоступный API. (If9828)
- Удалены устаревшие адаптеры rxjava2, которые не принимали начальное значение (Idb72f).
Исправление ошибок
- foundation.Text устарел и заменен на material.Text. Если вам нужен простой текстовый API, который не использует значения из темы, ознакомьтесь с информацией о функции androidx.compose.foundation.BasicText. (If64cb)
- Поддержка BaseTextField прекращена. Используйте BasicTextField. (I896eb)
- Некоторые символы, связанные с макетом, были перенесены из androidx.compose.ui в androidx.compose.layout.ui. (I0fa98, b/170475424)
Внешний вклад
- Добавлен модуль
runtime-rxjava3для Compose. Совпадает со спискомruntime-rxjava2(I02cbf)
Версия 1.0.0-alpha06
28 октября 2020 г.
Выход androidx.compose.runtime:runtime-*:1.0.0-alpha06. Версия 1.0.0-alpha06 содержит следующие коммиты.
Изменения в API
- Теперь Recomposer является CompositionReference и допустимым родительским элементом композиции. Теперь явное указание Recomposer требуется в меньшем количестве мест. (I4036f)
- Добавлен API DisposableEffect, который является аналогом SideEffect и выполняет роль onCommit-with-params, но с обязательным onDispose.
- Добавлен API rememberUpdatedState для публикации данных из повторной композиции в текущие или долгосрочные процессы, такие как DisposableEffect или LaunchedTask.
- (Id50b9)
- MutableVector теперь реализует RandomAccess (I85d73, b/170461551)
- Добавлен компонуемый элемент SideEffect для применения побочных эффектов композиции к объектам, управляемым композицией. Функция SideEffect предназначена для замены composable-функции onCommit. (Ia77c2)
- Новый экспериментальный API RestorableStateHolder. Он позволяет сохранить состояние, определенное с помощью [savedInstanceState] и [rememberSavedInstanceState], для поддерева перед его удалением, чтобы в следующий раз можно было восстановить его состояние. (I66884, b/166586419)
Исправление ошибок
- Включите переходы в ComposeTestRule; удалите параметр, позволяющий включить мигающий курсор из ComposeTestRule. (If0de3)
Версия 1.0.0-alpha05
14 октября 2020 г.
Выход androidx.compose.runtime:runtime-*:1.0.0-alpha05. Версия 1.0.0-alpha05 содержит следующие коммиты:
Изменения в API
- Экспериментальный модификатор.Модификатор ввода, приостанавливающий ввод указателя (Ia77d2)
- Прокрутка в LazyColumn/Row стала более плавной, поскольку при каждом пролистывании выполняется меньше операций вложенной композиции. В класс Composition добавлен новый метод hasInvalidations(). Метод hasPendingChanges() из Recomposer переименован в hasInvalidations() (Ib2f32, b/168293643, b/167972292, b/165028371).
- Добавлен API produceState для запуска сопрограмм из композиции, которые со временем обновляют одно значение
State<T>(Id4a57). - launchInComposition переименован в LaunchedTask в соответствии с рекомендациями по использованию API Compose (I99a8e)
- Порядок вызовов place() в пользовательских макетах теперь определяет порядок отрисовки дочерних элементов (Ibc9f6)
Версия 1.0.0-alpha04
1 октября 2020 г.
Выход androidx.compose.runtime:runtime-*:1.0.0-alpha04. Версия 1.0.0-alpha04 содержит следующие коммиты:
Изменения в API
- Добавлен OwnerScope, позволяющий собирать данные о макете и отрисовке, когда они становятся недействительными. (Ic4cf8)
- Добавлен API derivedStateOf для создания объектов State на основе вычислений, которые могут считывать (и получать) другие объекты State (If758b).
- Добавлен TestOnly API для SnapshotStateObserver (I6e2a9).
Исправление ошибок
- Поддержка foundation.Box прекращена. Используйте вместо него foundation.layout.Box. (Ie5950, b/167680279)
Версия 1.0.0-alpha03
16 сентября 2020 г.
Выход androidx.compose.runtime:runtime-*:1.0.0-alpha03. Версия 1.0.0-alpha03 содержит следующие коммиты.
Изменения в API
CompositionCoroutineScopeбольше не реализуетMonotonicFrameClock. Вызывающие функцииwithFrameNanosдолжны явно импортировать функцию верхнего уровня. (Icb642, b/166778123)
Исправление ошибок
- Глобальные функции тестирования, такие как
onNodeилиwaitForIdle, теперь устарели. Перейдите на их новые аналоги, определенные в ComposeTestRule (I7f45a). launchInCompositionБольше не запускает сопрограммы без диспетчеризации (Ief6af, b/166486000)
Версия 1.0.0-alpha02
2 сентября 2020 г.
Выход androidx.compose.runtime:runtime-*:1.0.0-alpha02. Версия 1.0.0-alpha02 содержит следующие коммиты:
Изменения в API
- Добавлены API
snapshotFlowиwithMutableSnapshotдля использования и создания данных изменений снимков. (I3e722) Изменилось соглашение о вызовах для составных функций. Это изменение, нарушающее совместимость на уровне двоичных файлов. Все библиотеки необходимо перекомпилировать, чтобы они работали с этой версией плагина компилятора Compose.
Это изменение не приведет к нарушению совместимости на уровне источника, поскольку изменились только API компилятора, для которых требуется явное согласие. (I7afd2, b/158123185)
Удалены методы планирования из EmbeddingContext (I7b9be)
onPreCommit больше не поддерживается. Теперь поведение onPreCommit реализовано в onCommit.
Теперь функции onCommit и onActive выполняются в том же кадре хореографа, в котором были применены изменения композиции, а не в начале следующего кадра хореографа. (I70403)
Версия 1.0.0-alpha01
26 августа 2020 г.
Выход androidx.compose.runtime:runtime-*:1.0.0-alpha01. Версия 1.0.0-alpha01 содержит следующие коммиты:
Версия 0.1.0-dev
Версия 0.1.0-dev17
19 августа 2020 г.
Выход androidx.compose.runtime:runtime-*:0.1.0-dev17. Версия 0.1.0-dev17 содержит следующие коммиты:
Изменения в API
- Теперь в пользовательских событиях можно объявлять, что один или несколько их сеттеров можно пропустить и перекомпоновать независимо от события. (Ibbd13)
Удалены устаревшие вызовы FrameManager.
Внутренние API для создания писем были изменены, чтобы уменьшить объем служебной информации, необходимой для отслеживания объектов состояния, таких как
mutableStateof()(I80ba6).Компонуемый элемент
state { ... }теперь считается устаревшим. Вместо него рекомендуется использовать явные вызовыremember { mutableStateOf(...) }. Это уменьшает общую поверхность API и количество концепций для управления состоянием, а также соответствует шаблонуby mutableStateOf()для делегирования свойств класса. (Ia5727)Теперь функция Flow.collectAsState определяет диспетчер по умолчанию на основе композиции, а не использует Dispatchers.Main. (I9c1d9)
Исправлен сбой, возникавший при использовании внутри цикла for чего-либо, сохраняющего состояние. Теперь в savedInstanceState() можно использовать один и тот же ключ. API UiSavedStateRegistry был изменен в соответствии с этим новым требованием (I4ab76, b/160042650, b/156853976, b/159026663, b/154920561).
Исправление ошибок
- Поддержка
emitViewпрекращена. Если вы используете Compose, по возможности используйтеAndroidViewвместо этого. Обратите внимание, что в будущем создание представлений и групп представлений напрямую не будет поддерживаться, если только они не являются листьями в дереве композиции. В этом случае их можно будет создать с помощью AndroidView. (I29b1e, b/163871221)
Версия 0.1.0-dev16
5 августа 2020 г.
Выход androidx.compose.runtime:runtime-*:0.1.0-dev16. Версия 0.1.0-dev16 содержит следующие коммиты:
Изменения в API
По умолчанию для
mutableStateOf(),ambientOf()иsavedInstanceStateOf()теперь используется политика мутацииstructuralEqualityPolicy(), а неreferentialEqualityPolicy().По умолчанию при определении того, считается ли изменение нового значения, присвоенного экземпляру
mutableStateOf(), изменением, используется==вместо===.Подробнее: https://kotlinlang.org/docs/reference/equality.html.
ambientOf()иsavedInstanceStateOf()используютmutableStateOf()в своих реализациях, поэтому мы изменили их, чтобы они соответствовалиmutableStateOf().Использование структурного равенства больше соответствует ожиданиям разработчиков.
Например,
val state = mutableStateOf(1f)за которым следует
state.value = 1fбольше не будет считаться изменением
state, и использованиеstateпри создании текста больше не будет требовать перекомпоновки.Это критическое изменение, но в большинстве случаев (например, при использовании классов, которые не переопределяют
equals()) оно не окажет заметного влияния на приложение.Классы, которые переопределяют
equals(), например классыdata, могут заметить снижение производительности, поскольку их методыequals()теперь по умолчанию вызываются при назначенииmutableStateOf().Чтобы восстановить прежнее поведение, добавьте параметр policy
policy = referentialEqualityPolicy()в вызовы функцийmutableStateOf(),ambientOf()иsavedInstanceStateOf(). (Ic21a7)Функции
RowиColumnтеперь встроены, что значительно снижает издержки на их использование. (I75c10)
Исправление ошибок
- Метод setViewContent устарел. Вместо него следует использовать setContent. (I7e497, b/160335130)
Добавлен MonotonicFrameAnimationClock, который позволяет использовать MonotonicFrameClock в качестве AnimationClockObservable, чтобы устранить разрыв между новыми часами на основе сопрограмм и API, которые по-прежнему используют старые часы на основе обратного вызова.
Эквивалентом ManualAnimationClock в MonotonicFrameClock теперь является ManualFrameClock. (I111c7, b/161247083)
Функция Modifier.stateDraggable была полностью переработана и переименована в Modifier.swipeable. Добавлен новый класс SwipeableState, а классы DrawerState и BottomDrawerState переработаны так, чтобы наследовать его. [Modal/Bottom]DrawerLayout больше не принимает параметр onStateChange. (I72332, b/148023068)
Метод Modifier.plus устарел. Используйте вместо него Modifier.then. Слово "затем" лучше указывает на порядок действий, а также запрещает использовать символ
Modifier.padding().background() + anotherModifier, который нарушает последовательность и затрудняет чтение (Iedd58, b/161529964).Добавлен SubcomposeLayout. Это примитив низкого уровня, который позволяет создавать дочерние элементы во время измерения, если мы хотим использовать некоторые значения, доступные только позже во время измерения для композиции поддерева. Например, WithConstraints не реализован с помощью SubcomposeLayout. (I25cc8)
Компонент Material FilledTextField был переименован в TextField, а компонент TextField был переименован в BaseTextField, чтобы упростить поиск и использование API (Ia6242, b/155482676).
Функция Modifier.drawBackground переименована в Modifier.background (I13677).
Версия 0.1.0-dev15
22 июля 2020 г.
Выход androidx.compose.runtime:runtime-*:0.1.0-dev15. Версия 0.1.0-dev15 содержит следующие коммиты:
Обновление зависимостей
- Чтобы использовать версию
0.1.0-dev15библиотеки Compose, вам нужно обновить зависимости в соответствии с новыми фрагментами кода, приведенными выше в разделе Объявление зависимостей.
Изменения в API
Аннотация
@Modelбольше не поддерживается. Вместо этого используйте state и mutableStateOf. Это решение было принято после тщательного обсуждения.Обоснование
Обоснование может включать, помимо прочего, следующие сведения:
- Уменьшает количество API и концепций, которые нужно изучить.
- Более тесная интеграция с другими аналогичными инструментами (Swift UI, React, Flutter)
- Решение можно отменить. Мы всегда можем вернуть
@Modelпозже. - Удаляет редкие случаи использования и сложные вопросы о настройке
@Modelкак то, что нам нужно обрабатывать. @Modelклассы данных, equals, hashcode и т. д.- Как настроить отслеживание одних ресурсов и не отслеживать другие?
- Как указать, какое равенство (структурное или ссылочное) нужно использовать при наблюдении?
- Уменьшает количество "магии" в системе. Это снизит вероятность того, что кто-то решит, что система умнее, чем она есть на самом деле (например, что она знает, как сравнивать списки).
- Позволяет более интуитивно задавать уровень детализации наблюдений.
- Улучшена возможность рефакторинга переменной в свойство класса
- Позволяет выполнять оптимизацию на уровне штата.
- Более тесно связан с остальной частью экосистемы и уменьшает неопределенность в отношении неизменяемого состояния или нашего "принятия изменяемого состояния".
Примечания к переносу
Почти все существующие случаи использования
@Modelможно легко преобразовать одним из двух способов. В примере ниже класс@Modelсодержит два свойства, которые используются в composable-функции.@Model class Position( var x: Int, var y: Int ) @Composable fun Example() { var p = remember { Position(0, 0) } PositionChanger( position=p, onXChange={ p.x = it } onYChange={ p.y = it } ) }Вариант 1. Используйте
State<OriginalClass>и создайте копии.Этот подход упрощается благодаря классам данных Kotlin. По сути, все свойства
varнужно преобразовать в свойстваvalкласса данных, а затем использоватьstateвместоrememberи присвоить значение состояния клонированным копиям оригинала с помощью удобного методаcopy(...)класса данных.Важно отметить, что этот подход работает только в том случае, если все изменения класса были выполнены в той же области видимости, в которой был создан экземпляр
State. Если класс изменяется сам по себе вне области использования и вы полагаетесь на это, то вам подойдет следующий подход.data class Position( val x: Int, val y: Int ) @Composable fun Example() { var p by state { Position(0, 0) } PositionChanger( position=p, onXChange={ p = p.copy(x=it) } onYChange={ p = p.copy(y=it) } ) }Вариант 2. Используйте mutableStateOf и делегаты свойств
Этот подход упрощается благодаря делегатам свойств Kotlin и API
mutableStateOf, который позволяет создавать экземпляры MutableState вне композиции. Замените все свойстваvarисходного класса на свойстваvarс делегатом свойстваmutableStateOf. Это удобно, поскольку использование класса не изменится, а изменится только его внутренняя реализация. Однако поведение не будет полностью идентичным, поскольку теперь каждое свойство наблюдается/подписывается индивидуально, поэтому повторные композиции, которые вы увидите после этого рефакторинга, могут быть более узкими (что хорошо).class Position(x: Int, y: Int) { var x by mutableStateOf(x) var y by mutableStateOf(y) } // source of Example is identical to original @Composable fun Example() { var p = remember { Position(0, 0) } PositionChanger( position=p, onXChange={ p.x = it } onYChange={ p.y = it } ) }(I409e8, b/152050010, b/146362815, b/146342522, b/143413369, b/135715219, b/143263925, b/139653744)
Изменяет стратегию генерации кода компилятора Compose. До изменений компилятор Compose преобразовывал вызовы функций, которые можно использовать в композиции. Теперь мы преобразуем тело composable-функции, оставляя место вызова практически без изменений.
Это означает, что большая часть логики, связанной с передачей данных в среду выполнения Compose, выполняется в начале тела функции, а не в месте ее вызова.
Это изменение должно быть совместимо с исходным кодом для всех случаев использования функции compose. Большинству пользователей Compose не нужно будет обновлять код.
Чтобы обеспечить поддержку этой работы, сигнатура JVM всех функций, которые можно комбинировать, была изменена. Функция Composable, принимающая один параметр, преобразуется в функцию, принимающую три параметра: Composer, целочисленный ключ и целочисленную битовую маску, используемую для передачи метаданных через вызовы.
Compose теперь также преобразует аргументы по умолчанию в composable-функцию. При этом не создается дополнительная синтетическая перегрузка функции по умолчанию, поэтому в результате изменений будет определено меньше функций.
Известные изменения в поведении, которые произойдут в результате этого:
- Некоторые звонки будут пропускаться, хотя раньше этого не происходило.
- Теперь составные выражения в выражениях аргументов по умолчанию правильно обрабатываются и на них можно подписываться.
В ходе этой работы были выполнены следующие оптимизации: 1. Результаты сравнения параметров передаются через граф вызовов другим функциям, которые можно комбинировать. Это приведет к меньшему количеству сравнений во время выполнения, уменьшит размер таблицы слотов, а также позволит пропускать больше составных функций, которые ранее не пропускались. 2. Параметры, которые во время компиляции определяются как статические, больше не сравниваются и не хранятся во время выполнения. Это уменьшает количество сравнений и размер таблицы слотов. 3. Структура управления потоком тела функций используется для минимизации количества создаваемых групп. Это уменьшает размер таблицы слотов и снижает нагрузку на среду выполнения 4. Неиспользуемые параметры отправки и получателя для функций не учитываются при определении возможности пропуска функции, если они не используются в теле функции.
Большинство критических изменений коснулись API, на которые непосредственно нацелен компилятор, поэтому типичное использование Compose не будет затронуто: 1. Composer::startExpr был удален 2. Функция Composer::endExpr удалена 3. Composer::call устарел 4. Перегрузки функции
key, не использующие varargs, удалены. Используйте версиюvararg. 5. Аннотация Pivotal устарела. Используйте вместо негоkey. 6. Функция ScopeUpdateScope::updateScope теперь принимает Function3 вместо Function1. 7. Функции restartableFunction и restartableFunctionN были обновлены и теперь включают дополнительные параметры времени компиляции (I60756, b/143464846).В MutableVector добавлены функции sortWith и removeRange (Icccf7).
Добавлены реализации методов по умолчанию для CompositionLifecycleObserver (I24289).
Теперь для удаления композиций в Applier требуется метод clear() (Ibe697).
В MutableVector добавлен метод asMutableList(), чтобы его можно было передавать в общедоступный API без необходимости копировать весь список. (I298df)
Добавлен метод rememberCoroutineScope(), чтобы получать управляемый CoroutineScope в композиции для запуска задач в ответ на события. (I0e264)
MutableVector – это новая коллекция, которая не реализует ни один из стандартных интерфейсов Collection. Эта коллекция обеспечивает высокую скорость работы и предназначена только для внутреннего использования. (I8ebd6)
Временно удалены
StableMutableListиStableMutableMap, чтобы избежать проблемы в версии Kotlin, которая требуется для Compose. Эти интерфейсы будут возвращены, когда Compose будет обновлен до версии Kotlin, в которой нет этой проблемы.SnapshotStateListиSnapshotStateMapтеперь общедоступны, но будут удалены после восстановленияStableMutableListиStableMutableMap. (Ia7769)Добавлена функция верхнего уровня withFrameNanos для определения времени анимации (Ie34c5).
Аннотация @Untracked больше не поддерживается. Замените на @ComposableContract(tracked=false) (Id211e)
Функция RestartableFunction и связанные с ней API были переименованы в ComposableLambda и т. д. Эти API использовались только компилятором, поэтому это изменение не должно повлиять на совместимость на уровне исходного кода. Переименование было выполнено в основном для того, чтобы было понятнее, что это за класс, когда он появляется в трассировках стека (I7eb25).
Аннотация @Composable больше недействительна для классов (Ia5f02)
Ambient<T>теперь имеет аннотацию @Stable вместо @Immutable (I0b4bb)До этого изменения плагин компилятора Compose перехватывал вызовы конструкторов внутри composable-функции, если существовала ошибка I5205a (b/158123804).
Компонуемый элемент Recompose больше не является полезной абстракцией. Большинство повторных композиций должно происходить в результате присвоений MutableState. В остальных случаях рекомендуется использовать функцию
invalidate, чтобы запустить повторное создание текущей области. (Ifc992)Наблюдение больше не является полезной абстракцией. Если вам нужно реплицировать его, его реализацию можно реплицировать, просто создав composable-функцию, которая выполняет composable-лямбда-параметр. Пример:
@Composable fun Observe(body: @Composable () -> Unit) = body()(I40d37).Аннотация @Direct была объявлена устаревшей и заменена на @ComposableContract(restartable=false) (If4708).
Добавлен адаптер для недавно представленного StateFlow, который позволяет предварительно заполнять начальное значение, чтобы возвращаемое состояние не было нулевым (I61dd8, b/156233789).
Добавлен адаптер для Flow. Пример использования: val value by flow.collectAsState() (If2198, b/153375923).
[Mutable]Операторы делегирования свойств State перенесены в расширения, чтобы поддерживать оптимизацию делегирования свойств Kotlin 1.4. Чтобы продолжить использовать
by state { ... }илиby mutableStateOf(...), вызывающие абоненты должны добавить импорты. (I5312c)Класс androidx.compose.ViewComposer перенесен в androidx.ui.node.UiComposer. Класс androidx.compose.Emittable удален. Он был избыточным по отношению к ComponentNode. androidx.compose.ViewAdapters был удален. Они больше не поддерживаются. Поддержка Compose.composeInto прекращена. Используйте
setContentилиsetViewContent. Поддержка метода Compose.disposeComposition прекращена. Вместо этого используйте методdisposeдля объектаComposition, возвращенного методомsetContent. Функция androidx.compose.Compose.subcomposeInto перенесена в androidx.ui.core.subcomposeInto. Метод ComponentNode#emitInsertAt переименован в ComponentNode#insertAt. Метод ComponentNode#emitRemoveAt переименован в ComponentNode#removeAt. Метод ComponentNode#emitMode переименован в ComponentNode#move (Idef00).Флаг
ComposeFlags.COMPOSER_PARAMбыл изменен наtrue, что повлияет на стратегию генерации кода для плагина Compose. В общих чертах это приводит к тому, что функции @Composable генерируются с дополнительным синтетическим параметром, который передается последующим вызовам @Composable, чтобы среда выполнения могла правильно управлять выполнением. Это значительное изменение, однако оно должно сохранить совместимость на уровне исходного кода во всех разрешенных случаях использования Compose. (I7971c)Критические изменения в API для фоновых функций. Подробную информацию можно найти в документации по журналам и
Ambient<T>(I4c7ee, b/143769776).Добавлен новый артефакт ui-livedata с адаптером для LiveData. Пример использования: val value by liveData.observeAsState() (Ie9e8c, b/150465596)
Адаптеры Rx без явного начального значения устарели. Использование значения null не всегда является лучшим вариантом по умолчанию. Например, если у вас есть список, лучше начать с emptyList() или любого другого подходящего значения по умолчанию (I00025, b/161348384).
Добавлен новый артефакт ui-rxjava2 с адаптерами для RxJava2. Пример использования: val value by observable.subscribeAsState() (Ifab4b, b/153369097).
savedInstanceState()теперь можно использовать с типами, допускающими значение NULL (I6847f, b/153532190)Добавлены функции listSaver() и mapSaver(), которые упрощают создание объектов Saver (I8cf68, b/152331508).
Новые функции: savedInstanceState() и rememberSavedInstanceState(). Они похожи на state() и remember(), но имеют встроенную поддержку сохраненного состояния экземпляра (If1987, b/152025209).
Исправление ошибок
runOnIdleComposeпереименован вrunOnIdle(I83607)- Сделан экспериментальным API LayoutNode (I4f2e9)
- androidx.ui.foundation.TextFieldValue и androidx.ui.input.EditorValue больше не поддерживаются. Компонуемые функции TextField, FilledTextField и CoreTextField, в которых используется этот тип, также устарели. Используйте androidx.ui.input.TextFieldValue (I4066d, b/155211005).
- Удален устаревший API DrawBackground в пользу API расширения drawBackground на Modifier. Реализации цвета, кисти и drawBackground были переработаны, чтобы сократить количество путей кода, а также удалить требование к созданию модификатора как части композиции. (I0343a)
- Обновлены API более высокого уровня, которые предоставляют Canvas, чтобы вместо этого предоставлять CanvasScope. Это позволяет потребителям не создавать собственные объекты Paint. Пользователи, которым по-прежнему нужен доступ к Canvas, могут использовать метод drawCanvas, который предоставляет функцию обратного вызова для отправки команд рисования с помощью базового Canvas. (I80afd)
- Изменен API конечной лямбда-функции WithConstraints. Теперь вместо двух параметров используется область действия получателя, которая помимо ограничений и направления макета предоставляет свойства minWidth, maxWidth, minHeight и maxHeight в единицах dp (I91b9a, b/149979702).
- Добавлен модификатор симметричных полей. (I39840)
- Обновлены параметры wrapContentWidth и wrapContentHeight, чтобы они ожидали выравнивание по вертикали или горизонтали, а не любое выравнивание. Модификатор gravity теперь принимает выравнивание по вертикали или горизонтали. В Row, Column и Stack добавлена поддержка специальных непрерывных выравниваний. (Ib0728)
- Модуль ui-text переименован в ui-text-core (I57dec).
- Улучшения DrawModifier API:
- Область действия получателя для функции draw() изменена на ContentDrawScope
- Удалены все параметры в функции draw()
- У DrawScope такой же интерфейс, как и у CanvasScope.
- У ContentDrawScope есть метод drawContent() (Ibaced, b/152919067)
- Поддержка ColoredRect прекращена. Вместо него используйте
Box(Modifier.preferredSize(width, height).drawBackground(color)). (I499fa, b/152753731) - Замена оператора "Модификатор плюс" на функции расширения производителя (I225e4)
- Теперь к элементам RowScope и ColumnScope можно получить доступ за пределами строк и столбцов. (I3a641)
- Переименован макет LayoutFlexible в LayoutWeight. Параметр "Плотный" переименован в "Заливка". (If4738)
- В функцию WithConstraints добавлен параметр LayoutDirection (I6d6f7)
- Переименован фон в DrawBackground и сделано так, чтобы он запоминался по умолчанию (Ia0bd3).
- Заменили ButtonStyle отдельными функциями и удалили перегрузку текста (строки). Чтобы узнать, как использовать эти данные, ознакомьтесь с обновленными примерами. (If63ab, b/146478620, b/146482131)
runOnIdleComposeиrunOnUiThreadтеперь глобальные функции, а не методы ComposeTestRule. (Icbe8f)
Внешний вклад
- Удаление ненужных API, таких как Looper и Handler, из уровня переноса Compose Runtime (I6847d)
- Удаление
Flow<T>.collectAsState()без начального значения. ИспользуйтеStateFlow<T>или передайте явное начальное значение. (I63f98, b/157674865)