Составить среду выполнения
androidx.compose.runtime
androidx.compose.runtime.rxjava2
androidx.compose.runtime.rxjava3
androidx.compose.runtime.savable
androidx.compose.runtime.snapshots
( См. справочную документацию API для всех пакетов Compose )
Последнее обновление | Стабильный релиз | Кандидат на релиз | Бета-версия | Альфа-релиз |
---|---|---|---|---|
27 августа 2025 г. | 1.9.0 | - | - | 1.10.0-альфа02 |
Структура
Compose — это комбинация из 7 идентификаторов групп Maven в androidx
. Каждая группа содержит определённый набор функций, каждый из которых сопровождается собственным набором заметок о выпуске.
В этой таблице объясняются группы и ссылки на каждый набор заметок о выпуске.
Группа | Описание |
---|---|
compose.animation | Создавайте анимацию в своих приложениях Jetpack Compose, чтобы обогатить пользовательский опыт. |
compose.компилятор | Преобразуйте функции @Composable и включите оптимизацию с помощью плагина компилятора Kotlin. |
compose.foundation | Создавайте приложения Jetpack Compose с помощью готовых строительных блоков и расширяйте базу для создания собственных элементов системы проектирования. |
сочинить.материал | Создавайте пользовательские интерфейсы 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, необходимо добавить репозиторий Google Maven в свой проект. Подробнее см. в репозитории Google Maven .
Добавьте зависимости для необходимых артефактов в файл build.gradle
вашего приложения или модуля:
Круто
dependencies { implementation "androidx.compose.runtime:runtime:1.9.0" implementation "androidx.compose.runtime:runtime-livedata:1.9.0" implementation "androidx.compose.runtime:runtime-rxjava2:1.9.0" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Котлин
dependencies { implementation("androidx.compose.runtime:runtime:1.9.0") implementation("androidx.compose.runtime:runtime-livedata:1.9.0") implementation("androidx.compose.runtime:runtime-rxjava2:1.9.0") } android { buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Дополнительные сведения о зависимостях см. в разделе Добавление зависимостей сборки .
Обратная связь
Ваши отзывы помогают улучшить Jetpack. Сообщите нам, если вы обнаружите новые проблемы или у вас есть идеи по улучшению этой библиотеки. Пожалуйста, ознакомьтесь с уже существующими проблемами в этой библиотеке, прежде чем создавать новую. Вы можете проголосовать за существующую проблему, нажав на кнопку со звёздочкой.
Более подробную информацию см. в документации по системе отслеживания проблем .
Версия трассировки выполнения 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-альфа05
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-альфа04
23 августа 2023 г.
Выпущена androidx.compose.runtime:runtime-tracing:1.0.0-alpha04
. Версия 1.0.0-alpha04 содержит следующие коммиты.
Новые функции
- Совместимость с последними версиями Benchmark и Tracing Perfetto, что обеспечивает поддержку Composition Tracing при запуске приложения (холодный запуск), например, в 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-альфа02
8 февраля 2023 г.
Выпущена androidx.compose.runtime:runtime-tracing:1.0.0-alpha02
. Версия 1.0.0-alpha02 содержит следующие коммиты.
Новые функции
- Функциональных изменений нет. Многочисленные оптимизации производительности в зависимостях нижестоящего уровня
androidx.tracing:tracing-perfetto*
.
Версия 1.0.0-альфа01
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.10
Версия 1.10.0-альфа02
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()
мог остаться невыполненным и неотправленным в Applier, что приводило к некорректному позиционированию состояния Applier для любого последующего использования. ( I7c583 ), ( I47b70 ) - Отмечает
CheckResult
как устаревший, поскольку он не предназначен для использования. ( I32934 )
Версия 1.10.0-альфа01
13 августа 2025 г.
Выпущен androidx.compose.runtime:runtime-*:1.10.0-alpha01
. Версия 1.10.0-alpha01 содержит следующие коммиты .
Изменения API
- Представляет API Retain. Как и
rememberSaveable
, Retain может сохранять и сохранять запомненные значения, выходящие за пределы иерархии композиции. Сохранённые значения не сериализуются и имеют более короткий срок жизни, чем сохранённые значения, и ведут себя аналогичноViewModel
AndroidX. Подробнее см. в документации. ( Ia3105 , b/177562901 ) - Добавлен API
awaitOrScheduleNextCompositionEnd()
, который выполняет обратный вызов, когда Recomposer завершает компоновку текущего кадра. Если Recomposer в данный момент не компонует кадр, этот API приостанавливается до завершения компоновки следующего кадра и планирует компоновку нового кадра. ( Ib873c ) - Добавить API локального поставщика, не возвращающего единицу, для композиции ( I22521 , b/271871288 )
- Добавлен флаг функции
isMovableContentUsageTrackingEnabled
, позволяющий отслеживать использование перемещаемого контента, чтобы избежать дополнительных затрат при его первоначальном создании. В настоящее время этот флаг отключен по умолчанию. ( Ia713d )
Исправления ошибок
- Устраняет сбой в работе перемещаемого контента при его перемещении между подкомпозициями. ( I3fa1e , b/436858107 )
- Исправлена ошибка, из-за которой часть трассировки стека составного объекта отсутствовала внутри нескольких вложенных подкомпозиций. ( 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.0
13 августа 2025 г.
Выпущена androidx.compose.runtime:runtime-*:1.9.0
. Версия 1.9.0 содержит следующие коммиты .
Важные изменения с версии 1.8.0
- Для проверок lint, поставляемых вместе с Compose, теперь требуется версия AGP не ниже 8.8.2. Если вы не можете обновить AGP, вы можете обновить Lint самостоятельно, указав
android.experimental.lint.version=8.8.2
(или более новую версию) в файле gradle.properties. Для запуска проверок lint Compose в среде IDE требуется Android Studio Ladybug или более новая версия. - Создана новая библиотека аннотаций времени выполнения. Она содержит определения аннотаций, не зависящие от среды выполнения Compose, поэтому её можно использовать из модулей, не относящихся к Compose.
-
@Stable
,@Immutable
и@StableMarker
были перемещены в аннотацию времени выполнения, чтобы разрешить аннотирование модулей, не относящихся к Compose. - В аннотацию времени выполнения добавлены аннотации
@FrequentlyChangingValue
и@RememberInComposition
.@FrequentlyChangingValue
отмечает объявления, которые могут привести к частым перекомпозициям, а@RememberInComposition
отмечает объявления, которые следует запомнить при композиции. Соответствующие проверки линтинга выдают предупреждения о некорректном использовании.
-
Версия 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 mangle для методов горячей перезагрузки. ( 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
на экспериментальный, чтобы учесть будущую разработку этой функции. ( I11db3 ) - Метод
currentCompositeKeyHash
теперь устарел. Вместо него используйтеcurrentCompositeKeyHashCode
. Новый API кодирует тот же хеш с большим количеством бит, что экспоненциально снижает вероятность того, что две случайные несвязанные группы в иерархии композиции будут иметь одинаковый хеш-ключ. ( I4cb6a , b/177562901 ) - Для проектов, выпущенных с использованием Kotlin 2.0, требуется использование KGP 2.0.0 или более поздней версии ( Idb6b5 ).
-
@Stable
,@Immutable
и@StableMarker
были перенесены в runtime-annotation (для совместимости). Теперь вы можете использовать runtime-annotation, если хотите использовать эти аннотации из библиотек, не зависящих от Compose. ( I23a16 ) - Перегрузка
rememberSaveable
, принимающаяKSerializer
, переименована вrememberSerializable
. Это изменение разъясняет её предназначение сkotlinx.serialization
. Поддержка общих классовkotlinx.Serializable
непосредственно вrememberSaveable
потребовала бы параметра типаreified
, что нарушило бы совместимость с исходным кодом, поскольку потребовало бы от всех точек вызова предоставлять информацию о типе 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 )
Внешний вклад
- Исправлена ошибка, затрагивающая пользователей Molecule, из-за которой использование
RecompositionMode.Immediate
могло приводить к пропуску перекомпозиций. ( I9f3a9 , b/419527812 ) - Выведены геттеры
PausableComposition
isApplied
иisCancelled
, которые позволяют проверять состояниеPausableComposition
. ( I994aa ) - Добавлен
AnnotationTarget.FUNCTION
в аннотациюFunctionKeyMeta
. ( I08021 )
Версия 1.9.0-альфа04
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 ).
Внешний вклад
- Исправлена ошибка, затрагивающая пользователей Molecule, из-за которой использование
RecompositionMode.Immediate
могло приводить к пропуску перекомпозиций. ( I9f3a9 , b/419527812 ) - Выведены геттеры
PausableComposition
isApplied иisCancelled
, которые позволяют проверять состояниеPausableComposition
. ( I994aa )
Версия 1.9.0-альфа03
20 мая 2025 г.
Выпущена androidx.compose.runtime:runtime-*:1.9.0-alpha03
. Версия 1.9.0-alpha03 содержит следующие коммиты .
Изменения API
- Измените
setDiagnosticStackTraceEnabled
на экспериментальный, чтобы учесть будущую разработку этой функции. ( I11db3 )
Исправления ошибок
- Исправлено повторное использование состояния, когда композиция была приостановлена и перезапущена, но некоторые ранее приостановленные состояния требовали повторной компоновки, поскольку некоторые считанные состояния изменились, пока композиция была приостановлена. ( I441d1 , b/416209738 )
- Завершено исправление ошибки приостановки композиции (запомните отправку) для ошибки b/404058957. Предыдущее исправление было неполным. ( I1afd4 , b/404058957 )
-
SaveableStateHolder.SaveableStateProvider
теперь предоставляетLocalSavedStateRegistryOwner
для своего содержимого через композицию. ( Ia2761 , b/413108878 ) -
androidx.compose.runtime.saveable
теперь зависит отandroidx.lifecycle.runtime.compose
. ( I53228 , b/413108878 )
Версия 1.9.0-альфа02
7 мая 2025 г.
Выпущен androidx.compose.runtime:runtime-*:1.9.0-alpha02
. Версия 1.9.0-alpha02 содержит следующие коммиты .
Изменения API
- Устаревший параметр
rememberSaveable
с пользовательским «ключом». Он обходит позиционную область видимости, что приводит к ошибкам состояния и несогласованному поведению (например, непреднамеренному совместному использованию или потере состояния, проблемам во вложенныхLazyLayouts
). Удалите параметр «ключ», чтобы использовать позиционную область видимости для согласованного состояния с локальной областью видимости. Подробнее см. полное сообщение о коммите . ( 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-альфа01
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
. Для запуска проверок lint Compose в среде IDE требуется Android Studio Ladybug или более новая версия.
Изменения API
- Метод
currentCompositeKeyHash
теперь устарел. Вместо него используйтеcurrentCompositeKeyHashCode
. Новый API кодирует тот же хеш с большим количеством бит, что экспоненциально снижает вероятность того, что две случайные несвязанные группы в иерархии композиции будут иметь одинаковый хеш-ключ. ( I4cb6a , b/177562901 ) - Для проектов, выпущенных с использованием Kotlin 2.0, требуется использование KGP 2.0.0 или более поздней версии ( Idb6b5 ).
-
@Stable
,@Immutable
и@StableMarker
были перенесены в runtime-annotation (для совместимости). Теперь вы можете использовать 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
: аннотацию, которая может помечать конструкторы, функции и геттеры свойств, указывая, что их нельзя вызывать напрямую внутри композиции без запоминания. Соответствующая проверка линта выявит ошибки. Эта аннотация может использоваться для пометки объявлений, возвращающих изменяемые объекты с сохранением состояния, объекты, идентичность которых важно сохранять между композициями, или объекты, создание экземпляров которых требует больших затрат и которые следует кэшировать между композициями. ( Ie7db0 ) - Добавлена новая перегрузка
rememberSaveable
, поддерживающаяKSerializer
для типобезопасного сохранения состояния с использованием сериализации KotlinX. Существующий API на основеSaver
продолжает поддерживаться. ( Iea4ab , b/376028110 )
Исправления ошибок
- Исправлена отправка наблюдателей запоминания в приостановленной композиции, чтобы избежать отправки запомненных/забытых в том же применении ( I570b2 , b/404645679 , b/407931790 ).
- Методы
SnapshotObserver
onCreating переименованы вonPreCreate
иonDisposing
вonPreDispose
в соответствии с рекомендациями API. Предыдущие методы устарели, а новые методы по умолчанию вызывают старые, поэтому существующие реализации этого интерфейса продолжат работать до тех пор, пока они не будут удалены. Эти методы будут удалены в альфа-версии 1.9.0 в следующем CL, который выйдет вскоре после этой. Они будут удалены из бета-версии 1.8 до версии 1.8 stable. ( I6d753 ) - Исправлена ошибка, из-за которой запомненные значения могли быть ошибочно забыты и пересчитаны при повторном составлении исключенной группы, которая появляется после перемещаемой группы ( I62cab , b/383769314 ).
- Добавлена поддержка трассировок стека компоновки в
LaunchedEffect
иrememberCoroutineScope
( I705c0 , b/354163858 ). - Для проверки lint в Compose теперь требуется AGP версии не ниже 8.8.2 из командной строки и как минимум Android Studio Ladybug для поддержки IDE. Если вы используете более старую версию AGP, вы можете установить
android.experimental.lint.version=8.8.2
в gradle.properties, чтобы обновить версию Lint, не затрагивая AGP. ( I6f2a8 )
Внешний вклад
- Добавлен
AnnotationTarget.FUNCTION
в аннотациюFunctionKeyMeta
. ( 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
- Методы
SnapshotObserver
onCreating переименованы вonPreCreate
иonDisposing
вonPreDispose
в соответствии с рекомендациями API. Предыдущие методы устарели, а новые методы по умолчанию вызывают старые, поэтому существующие реализации этого интерфейса продолжат работать до тех пор, пока они не будут удалены. Эти методы будут удалены в альфа-версии 1.9.0 в следующем CL, который выйдет вскоре после этой. Они будут удалены из бета-версии 1.8 до версии 1.8 stable. ( 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
- Исправлена ошибка, из-за которой создание объекта throwable во время композиции, не выходящего за рамки Exception, могло привести к ошибке «Ожидаемая композиция не была применена». ( I356be , b/382094412 )
Версия 1.8.0-альфа08
15 января 2025 г.
Выпущен androidx.compose.runtime:runtime-*:1.8.0-alpha08
. Версия 1.8.0-alpha08 содержит следующие коммиты .
Версия 1.8.0-альфа07
11 декабря 2024 г.
Выпущен androidx.compose.runtime:runtime-*:1.8.0-alpha07
. Версия 1.8.0-alpha07 содержит следующие коммиты .
Изменения API
- Добавлен инструментальный API, который помогает инспектору макета сопоставлять подкомпозиции с родительской композицией в случаях, когда узел не используется для объединения композиций. ( I4ce3d )
- Арифметические операции и специальные константы для
SnapshotId
теперь внутренние, а не публичные. При необходимости надSnasphotId
можно выполнять арифметические операции, преобразовав его вInt
илиLong
с помощьюtoInt()
илиtoLong()
соответственно. ( Ic3a57 )
Внешний вклад
- Оптимизируйте хранилище для параметров
movableContentOf
. ( ed87177 )
Версия 1.8.0-альфа06
13 ноября 2024 г.
Выпущен androidx.compose.runtime:runtime-*:1.8.0-alpha06
. Версия 1.8.0-alpha06 содержит следующие коммиты .
Изменения API
- Изменения в API
PausableComposition
. Эти критические изменения относятся к предыдущим версиям 1.8.0-alpha (начиная с 1.8.0-alpha02), но, поскольку это новые API в версии 1.8.0, обратная совместимость не поддерживается, поскольку API всё ещё находятся в стадии альфа-тестирования. ( I39819 ) - Добавляет инструментальные API для наблюдения за созданием новых композиций в Recomposer ( Iaeb7e )
- Добавлен
snapshotId
типаLong
вSnapshot
и объявлен устаревшимid
. Идентификатор снимка изменён сInt
наLong
, чтобы избежать переполнения идентификатора снимка в системах с очень высокой частотой кадров и длительной анимацией. Тип был сделан ожидаемым/актуальным, чтобы этот тип мог бытьInt
или другим на платформах, не имеющих собственного типаLong
. Платформам, не имеющим собственного типаLong
, например JavaScript, следует избегать высокой частоты кадров (более 1000 кадров в секунду), которая может привести к переполнению дляInt
approx каждые 24 дня. ( I38ac3 , b/374821679 )
Исправления ошибок
- Исправлено
providesDefault
для одногоprovides
. ( aosp/3318540 b/374263387 ) - Оптимизировать
ChangeList
. ( 3318538 )
Версия 1.8.0-альфа05
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-альфа04
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-альфа03
2 октября 2024 г.
Выпущен androidx.compose.runtime:runtime-*:1.8.0-alpha03
. Версия 1.8.0-alpha03 содержит следующие коммиты .
Улучшения производительности
- Лениво создайте дочерний контекст для
rememberCoroutineScope
( f61464 )-
rememberCoroutineScope
обычно используется для запуска сопрограмм в ответ на события, происходящие после композиции. В некоторых сценариях эти события могут вообще не произойти, что приводит к дополнительным затратам на создание и отмену заданий без какой-либо выгоды. - Сделайте так, чтобы область, возвращаемая
rememberCoroutineScope
, создавала свойcoroutineContext
лениво при доступе, полностью избегая создания и отмены задания, если область никогда не используется.
-
Версия 1.8.0-альфа02
18 сентября 2024 г.
Выпущен androidx.compose.runtime:runtime-*:1.8.0-alpha02
. Версия 1.8.0-alpha02 содержит следующие коммиты .
Новые функции
- Добавлена
PausableComposition
, позволяющая создавать подкомпозицию, которую можно приостановить во время композиции и асинхронно применить к ней. Для приостановки требуется поддержка компилятора, которая в настоящее время находится в разработке. ( I3394b )
Версия 1.8.0-альфа01
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
для библиотек компоновки. Это повышает эффективность генерируемого кода для всех неперезапускаемых компонуемых функций в 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-альфа08
1 мая 2024 г.
Выпущен androidx.compose.runtime:runtime-*:1.7.0-alpha08
. Версия 1.7.0-alpha08 содержит следующие коммиты .
Версия 1.7.0-альфа07
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-альфа06
3 апреля 2024 г.
Выпущен androidx.compose.runtime:runtime-*:1.7.0-alpha06
. Версия 1.7.0-alpha06 содержит следующие коммиты .
Исправления ошибок
- Исправлена обработка отдельных значений
providesDefault
( 538f45 ). - Избежать взаимоблокировки в Recomposer при доступе к кадровым часам ( 07e5c6 )
Версия 1.7.0-альфа05
20 марта 2024 г.
Выпущен androidx.compose.runtime:runtime-*:1.7.0-alpha05
. Версия 1.7.0-alpha05 содержит следующие коммиты .
Исправления ошибок
- Удалить поздние изменения в деактивированной композиции ( 5950bc )
Версия 1.7.0-альфа04
6 марта 2024 г.
Выпущен androidx.compose.runtime:runtime-*:1.7.0-alpha04
. Версия 1.7.0-alpha04 содержит следующие коммиты .
Улучшения производительности
- Вызвать
Snapshot.current
один раз для каждой оценки производного состояния ( ee7daf ) - Читать
currentRecord
один раз за наблюдение в композиции ( b882b2 ) - Удалить случайное выделение итератора в
snapshotFlow
( 231e56 ) - Включить
nonSkippingGroupOptimization
для библиотек компоновки. Это повышает эффективность генерируемого кода для всех неперезапускаемых компонуемых функций в AndroidX. В будущем мы планируем включить эту функцию по умолчанию. I( acbc08 )
Версия 1.7.0-альфа03
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-альфа02
7 февраля 2024 г.
Выпущен androidx.compose.runtime:runtime-*:1.7.0-alpha02
. Версия 1.7.0-alpha02 содержит эти коммиты.
Исправления ошибок
- Делать недействительными составные лямбды в подкомпозициях в одном кадре. ( 98301с )
- Вызовите обратный вызов
onRelease
в том же порядке, что иonForgotten
. ( 2cd790 ) - Отфильтруйте измененные состояния, которые не наблюдаются в
snapshotFlow
. ( 796b80 )
Улучшения производительности
- Измените наблюдатель снимков на месте, когда он уже прозрачен. ( ф60ф30 )
- Оптимизируйте
SnapshotIdSet.lowest()
. ( 7ae149 ) - Используйте
fold()
без выделения вSnapshotIdSet
. ( 532b7d ) - Удалить выделение итератора ( 83f96b )
Версия 1.7.0-альфа01
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 , б / 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
- Распространить определенные значения стабильности в аннотации. (274а4с)
Исправления ошибок
- Используйте ссылочную политику для составления состояния локальной области в контексте. (83361c)
- Ограничьте захват $dirty встроенными лямбда-выражениями. (acfca0)
- Исправлена ошибка, из-за которой перемещаемый контент иногда получал неправильные локальные элементы композиции. (035cd6)
- Используйте более быстрые хэш-карты без выделения памяти в
RecomposeScopeImpl
. (д79494) - Используйте
ObjectIntMap
вDerivedState
. (21862е) - Используйте
IntRef
для intSnapshotThreadLocal
вDerivedState
. (04eaf4)
Версия 1.6.0-альфа08
18 октября 2023 г.
Выпущен androidx.compose.runtime:runtime-*:1.6.0-alpha08
. Версия 1.6.0-alpha08 содержит эти коммиты.
Исправления ошибок
- Жизненные циклы
RememberObserver
запускаются только тогда, когда они сохраняются в расчете запоминания. ( f6b4dc ) - Улучшите распределение при сортировке списков недействительности. ( 954d63 )
- Используйте новые нераспределяющие карты в
SnapshotStateObserver
. ( 4303ce ) - Устраните недействительность при деактивации композиции. ( e001be )
Версия 1.6.0-альфа07
4 октября 2023 г.
Выпущен androidx.compose.runtime:runtime-*:1.6.0-alpha07
. Версия 1.6.0-alpha07 содержит эти коммиты.
Изменения API
-
SnapshotStateList
теперь помечен какRandomAccess
, чтобы можно было использовать версию помощников списка с прямой индексацией. ( I5210c , б / 219554654 )
Версия 1.6.0-альфа06
20 сентября 2023 г.
Выпущен androidx.compose.runtime:runtime-*:1.6.0-alpha06
. Версия 1.6.0-alpha06 содержит эти коммиты.
Версия 1.6.0-альфа05
6 сентября 2023 г.
Выпущен androidx.compose.runtime:runtime-*:1.6.0-alpha05
. Версия 1.6.0-alpha05 содержит эти коммиты.
Версия 1.6.0-альфа04
23 августа 2023 г.
Выпущен androidx.compose.runtime:runtime-*:1.6.0-alpha04
. Версия 1.6.0-alpha04 содержит эти коммиты.
Новые функции
- Повторное создание исключений, которые проглатываются во время цикла рекомпозиции ( 4dff9a ).
Изменения API
- Добавлен метод деактивации
ReusableComposition
, удаляющий наблюдения, но сохраняющий узлы на месте. Деактивированную композицию можно активировать снова, вызвавsetContent
. ( Ib7f31 ) - Добавьте интерфейс
ReusableComposition
для управления жизненным циклом и повторного использования подкомпозиций. ( I812d1 , б/252846775 )
Версия 1.6.0-альфа03
9 августа 2023 г.
Выпущен androidx.compose.runtime:runtime-*:1.6.0-alpha03
. Версия 1.6.0-alpha03 содержит эти коммиты.
Исправления ошибок
- Исправлена новая оптимизация
CompositionLocalProvider
( 3118e88 ). - Исправьте, как разбираются подвижные узлы контента. ( 5e3d59b )
Версия 1.6.0-альфа02
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 , б/288169379 )
Исправления ошибок
- Исправлена утечка памяти таблицы слотов ( 73fcfe ).
- Исправлено то, как мы восстанавливаем
rememberSaveable
, когдаstateSaver
возвращает значение null ( 90748c ).
Версия 1.6.0-альфа01
21 июня 2023 г.
Выпущен androidx.compose.runtime:runtime-*:1.6.0-alpha01
. Версия 1.6.0-alpha01 содержит эти коммиты.
Исправления ошибок
- Пропустить рекомпозицию подкомпозиций, которые будут удалены. ( Ieeb99 , б / 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 ). - Добавлены примитивные версии
State
API, позволяющие отслеживать значения Int, Long, Float и Double в объектахState
без штрафов за автобоксинг. Используйте новые фабричные методыmutableIntState(Int)
,mutableFloatStateOf(Float)
и т. д., чтобы использовать их. ( I48e43 )
Исправления ошибок
- Пропустить рекомпозицию подкомпозиций, которые будут удалены. ( Ieeb99 , б / 254645321 )
- Не сохранять ссылку на снимок в
ComposerImpl
( 0206f7 ). - Не наносите состав дважды ( f5791b )
- Обеспечить недействительность неинициализированных значений производного состояния ( aa2a92 ).
- Вызовите
onEndChanges
во время удаления композиции. ( 62cc8c ) - Исправлено перемещение контента в подкомпозицию ( 4beb41 ).
- Исправить потенциальные взаимоблокировки ( c1a425 и 8edce0 )
- Рекомпозер, созданный для окна Android, теперь будет блокировать только вызовы
withFrameNanos
, а не всю композицию, когда он получает уведомление ON_STOP. Это означает, что окна, связанные с остановленными действиями, будут продолжать перекомпоновываться при изменении данных, но анимация или любой другой вызывающий объектwithFrameNanos
будет блокироваться. ( Id9e7f , б/240975572 ) - Выполните обратные вызовы деактивации для
LayoutNode
перед удалением эффектов 3784073 - Исправлены измененные флаги для перезапущенных лямбда-выражений ea81df9.
- Исправлена регрессия живого редактирования для Composable с узлами 73fd4d8.
- ON_STOP должен приостанавливать передачу кадров вместо композиции ae276f1.
- Недействительные области
SnapshotStateObserver
для неизмененных производных состояний 84d9b1c - Исправлена возможная тупиковая ситуация при удалении композиций 28761fc.
- Исправлено перемещение контента в подкомпозицию 92d4156.
- Исправить измененные флаги для перезапущенных лямбда-выражений ( 8a03e9 ).
- Выполнить обратные вызовы деактивации для
LayoutNode
перед удалением эффектов ( 8b0fa4 ). - Исправлена
endToMarker()
при завершении группы узлов. ( d71d980 ) - Использовать текущую группу
SlotWriter
для проверки деактивации ( a0b518b ) - Удалите
fill
вSlotTable.moveSlotGapTo()
и переместите ее на закрытие ( 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()
в соответствующие специализированные типы для примитивов. Её идентификатор lint —AutoboxingStateCreation
. Ранее эта инспекция была включена по умолчанию для всех проектов. Чтобы увидеть это предупреждение в редакторе Android Studio и в результатах lint вашего проекта, измените его уровень серьёзности с информационного на предупреждение (или выше), объявив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 , б / 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-альфа04
10 мая 2023 г.
Выпущен androidx.compose.runtime:runtime-*:1.5.0-alpha04
. Версия 1.5.0-alpha04 содержит эти коммиты.
Изменения API
- Добавлены примитивные версии
State
API, позволяющие отслеживать значения Int, Long, Float и Double в объектахState
без штрафов за автобоксинг. Используйте новые фабричные методыmutableIntState(Int)
,mutableFloatStateOf(Float)
и т. д., чтобы использовать их. ( I48e43 )
Исправления ошибок
Вызовите
onEndChanges
во время удаления композиции. Узлы фокуса, удаленные во времяComposition.dispose
, подписываются наonEndChanges
для сброса фокуса. ( 03d4a47 )Обеспечьте аннулирование неинициализированных значений производного состояния. Каждое производное состояние связано со списком его зависимостей в
SnapshotStateObserver
, который используется для признания недействительными областей, связанных с производным состоянием, при каждом изменении зависимости. Изменение зависимости регистрируется при перемещении снимка, что может произойти после чтения производного состояния (из-за вызоваSnapshot.notifyObjectsInitialized()
).Предыдущая логика наблюдения производного состояния в
SnapshotStateObserver
очищала старые зависимости, а затем считывала новое значение. Это привело к возникновению состояния гонки, при котором недействительность произошла в очищенном состоянии, где недействительность зависимостей не была зарегистрирована.Это изменение изменяет порядок чтения производного состояния и очистки зависимостей, гарантируя, что аннулирование всегда происходит в допустимом состоянии. ( c472be6 )
Версия 1.5.0-альфа03
19 апреля 2023 г.
Выпущен androidx.compose.runtime:runtime-*:1.5.0-alpha03
. Версия 1.5.0-alpha03 содержит эти коммиты.
Изменения API
- Рекомпозер, созданный для окна Android, теперь будет блокировать только вызовы
withFrameNanos
, а не всю композицию, когда он получает уведомление ON_STOP. Это означает, что окна, связанные с остановленными действиями, будут продолжать перекомпоновываться при изменении данных, но анимация или любой другой вызывающий объектwithFrameNanos
будет блокироваться. ( Id9e7f , б/240975572 )
Исправления ошибок
- Исправлен потенциальный тупик в списке снимков и сопоставлении 5c1a425.
- Выполните обратные вызовы деактивации для
LayoutNode
перед удалением эффектов 3784073 - Исправлены измененные флаги для перезапущенных лямбда-выражений ea81df9.
- Исправлена регрессия живого редактирования для Composable с узлами 73fd4d8.
- ON_STOP должен приостанавливать передачу кадров вместо композиции ae276f1.
- Недействительные области
SnapshotStateObserver
для неизмененных производных состояний 84d9b1c - Исправлена возможная тупиковая ситуация при удалении композиций 28761fc.
- Исправлено перемещение контента в подкомпозицию 92d4156.
Версия 1.5.0-альфа02
5 апреля 2023 г.
Выпущен androidx.compose.runtime:runtime-*:1.5.0-alpha02
. Версия 1.5.0-alpha02 содержит эти коммиты.
Новые функции
- Оператор
getValue
в Котлине теперь может быть составным ( f174f6e ).
Исправления ошибок, улучшения производительности
- Перезаписать записи объектов состояния недоступными записями состояния ( c986960 )
- Используйте композитор правильной области действия при реализации групп ( 9a5e5b6 ).
- Исправлена
endToMarker()
при завершении группы узлов. ( d71d980 ) - Использовать текущую группу
SlotWriter
для проверки деактивации ( a0b518b ) - Используйте
IdentityArraySet
для хранения недействительных снимков ( 7f60cca ). - Удалите
fill
вSlotTable.moveSlotGapTo()
и переместите ее на закрытие ( 81f9935 ). - Исправление отсутствующих аннулаций при перемещении подвижного контента ( 1d7c024 ).
- Исправить немедленную недействительность перемещенного подвижного содержимого ( 8676618 ).
- Уменьшить выделение для наблюдений моментальных снимков ( 5bc535f )
Версия 1.5.0-альфа01
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
, чтобы наблюдать за жизненным циклом составных узлов. 8b6a258 - Добавьте свойство
parameterTypes
вComposableMethod
7b6c7ad.
Исправления ошибок и улучшения производительности
- Очистите оба индекса области в
SnapshotStateObserver
29f4a3e. - Добавьте необходимые группы в тело непропускаемых лямбда-выражений 7d06752.
- Улучшены характеристики ссылки на память состояния моментального снимка 93fcae8.
- Удалить бокс в составе локального поиска 0875717
- Используйте правильный ключ для групп узлов одноразового использования 6388d8d
- Защита
SnapshotStateObserver
от рекурсивных и параллельных применений 98cb6ba - Добавлена проверка границ контрольного индекса в методе «get»
IdentityArraySet
35a77d3. - Обновите модуль Compose для использования расширений
ViewTreeLifecycleOwner
21c2122. - Отправлять уведомления о применении после того, как Recomposer завершит кадр. 98f2641
- Исправлен сбой индекса за пределами границ при отмене Recomposer 8f8656f.
- Всегда принудительно перекомпоновывать, если родительские поставщики композиции изменили 9526fcc.
- Допуск рекомпозера для отмененных заданий a55f7ed
- Улучшена обработка недействительности для большого количества композиторов 9b7ed67.
- Исправление создания закрывающих групп для нелокальных возвратов b6f590c.
Версия 1.4.0-rc01
8 марта 2023 г.
Выпущен androidx.compose.runtime:runtime-*:1.4.0-rc01
. Версия 1.4.0-rc01 содержит эти коммиты.
Исправления ошибок
Версия 1.4.0-бета02
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-бета01
8 февраля 2023 г.
Выпущен androidx.compose.runtime:runtime-*:1.4.0-beta01
. Версия 1.4.0-beta01 содержит эти коммиты.
Изменения API
- Добавлен
ComposeNodeLifecycleCallback
, который позволяет наблюдать за жизненным циклом узлов Compose ( I3731b ). - Добавлен
@TestOnly
вComposer.disableSourceInformation()
, так как эту функцию безопасно вызывать только в тесте. ( I896c8 )
Исправления ошибок
- Удалить бокс в локальном поиске композиции ( 62f66a )
- Улучшение характеристик ссылки на память состояния моментального снимка ( dfb451 ).
Версия 1.4.0-альфа05
25 января 2023 г.
Выпущены androidx.compose.runtime:runtime:1.4.0-alpha05
и androidx.compose.runtime:runtime-saveable:1.4.0-alpha05
. Версия 1.4.0-alpha05 содержит эти коммиты.
Изменения API
- Больше типов/обнуляемости встроенных/устаревших скрытых функций ( I24f91 )
Версия 1.4.0-альфа04
11 января 2023 г.
Выпущен androidx.compose.runtime:runtime-*:1.4.0-alpha04
. Версия 1.4.0-alpha04 содержит эти коммиты.
Изменения API
-
TestMonotonicFrameClock
теперь использует правильную экспериментальную аннотацию. ( I95c9e )
Исправления ошибок
- Защитить
SnapshotStateObserver
от рекурсивных и параллельных применений ( d902fb )
Версия 1.4.0-альфа03
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-альфа02
9 ноября 2022 г.
Выпущен androidx.compose.runtime:runtime-*:1.4.0-alpha02
. Версия 1.4.0-alpha02 содержит эти коммиты.
Версия 1.4.0-альфа01
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)
Составные API-интерфейсы отражения
- Был добавлен новый API
ComposableMethod
, обеспечивающий более надежные вызовы составных API на основе отражения. - Переместите ignoreComposable для создания среды выполнения.
- Переработать API для вызова составного метода.
Исправления во время выполнения
- Исправлен ошибочный тест диапазона для проверки таблицы слотов для маркеров.
- Разрешить перемещение подвижного содержимого в 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
. Это приведет к сообщению об ошибке при раннем возврате вместо разрешения раннего возврата, что приведет к сообщению о более поздней внутренней ошибке. - Это изменение потенциально может привести к появлению новых ошибок компилятора, требующих удаления нелокальных возвратов из лямбда-выражений, передаваемых этим функциям. ( Ибеа62 )
Версия 1.3.0-beta02
7 сентября 2022 г.
Выпущен androidx.compose.runtime:runtime-*:1.3.0-beta02
. Версия 1.3.0-beta02 содержит эти коммиты.
Исправления ошибок
- Обновлен API ( I64ca0 )
Версия 1.3.0-бета01
24 августа 2022 г.
Выпущен androidx.compose.runtime:runtime-*:1.3.0-beta01
. Версия 1.3.0-beta01 содержит эти коммиты.
Изменения API
- В
CompositionData
был добавлен методfind
, позволяющий инструментам разработчика, использующим этот API, быстро находить подгруппу композиции по ее идентификатору. ( I5794f )
Версия 1.3.0-альфа03
10 августа 2022 г.
Выпущен androidx.compose.runtime:runtime-*:1.3.0-alpha03
. Версия 1.3.0-alpha03 содержит эти коммиты.
Версия 1.3.0-альфа02
27 июля 2022 г.
Выпущен androidx.compose.runtime:runtime-*:1.3.0-alpha02
. Версия 1.3.0-alpha02 содержит эти коммиты.
Изменения API
- Повторно добавлен
ComposerKt.traceEventStart(Int, String)
для обратной совместимости ( I6e6de ).
Версия 1.3.0-альфа01
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
В Compose Runtime появилось несколько функций, представленных в версии 1.2.0, а также множество исправлений ошибок, стабилизирующих работу. Наиболее важной новой функцией стало введение API
movableContentOf
, который можно использовать для включения сложного пользовательского интерфейса, такого как переходы общих элементов. APImovableContentOf
преобразует составную лямбду в лямбду, которая перемещает ее состояние и соответствующие узлы в любое новое место, которое она вызывает. Когда предыдущий вызов покидает композицию, состояние временно сохраняется, и если новый вызов лямбды входит в композицию, то состояние и связанные с ним узлы перемещаются в место нового вызова. Если новый вызов не добавлен, состояние удаляется навсегда, и помните, что наблюдатели будут уведомлены.Если лямбда-выражение
movableContentOf
вызывается несколько раз в одной и той же композиции, для каждого вызова создаются новое состояние и узлы, и по мере того, как вызовы покидают композицию и входят новые вызовы, состояние перемещается от первых покидающих вызовов к входящим вызовам в порядке их вызова. Все состояние, не востребованное новыми вызовами, удаляется навсегда.Помимо этой и нескольких других новых функций, много времени было потрачено на стабилизацию среды выполнения и системы состояний моментальных снимков. Были устранены различные утечки памяти и оптимизированы пути кода.
С кратким списком изменений можно ознакомиться ниже:
Новые возможности версии 1.2
- Добавить экспериментальный снимок unsafeEnter/Leave
- Добавить экспериментальный API Snapshot.asContextElement.
- Введение Snapshot.withoutReadObservation
- Разрешить перемещение состояния внутри композиции
- Отслеживание рекомпозиций в Compose
Производительность в 1.2
- Улучшение локальной производительности композиции
- Базовые профили для композиции должны быть получены с использованием эталонных тестов.
Исправления ошибок в 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 содержит эти коммиты.
Исправления ошибок
- Наблюдения за производным состоянием ранее безоговорочно удалялись из области перекомпоновки и композиции вместе, что нарушало работу других областей, которые все еще могли наблюдать производное состояние. Это изменение удаляет экземпляры производного состояния только в том случае, если оно больше не наблюдается в других областях. ( б / 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
- Интерфейсы в библиотеках компоновки теперь создаются с использованием методов интерфейса jdk8 по умолчанию ( I5bcf1 ).
Версия 1.2.0-бета03
1 июня 2022 г.
Выпущен androidx.compose.runtime:runtime-*:1.2.0-beta03
. Версия 1.2.0-beta03 содержит эти коммиты.
Версия 1.2.0-бета02
18 мая 2022 г.
Выпущен androidx.compose.runtime:runtime-*:1.2.0-beta02
. Версия 1.2.0-beta02 содержит эти коммиты.
Версия 1.2.0-бета01
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-альфа08
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 , б/220322704 )
Версия 1.2.0-альфа07
6 апреля 2022 г.
Выпущен androidx.compose.runtime:runtime-*:1.2.0-alpha07
. Версия 1.2.0-alpha07 содержит эти коммиты.
Изменения API
- Добавлена новая функция
Snapshot.withoutReadObservation { ... }
. Это позволяет пользователям запускать переданную лямбду без подписки на изменения значений состояния, считываемых во время этого блока. Вы можете найти это полезным в случаях использования, когда вы хотите получить выгоду от потокобезопасной записи/чтения на основе моментальных снимков, но хотите иметь возможность читать значение, не вызывая ненужной рекомпозиции или повторного измерения. ( I9f365 , б/214054486 )
Версия 1.2.0-альфа06
23 марта 2022 г.
Выпущен androidx.compose.runtime:runtime-*:1.2.0-alpha06
. Версия 1.2.0-alpha06 содержит эти коммиты.
Версия 1.2.0-альфа05
9 марта 2022 г.
Выпущен androidx.compose.runtime:runtime-*:1.2.0-alpha05
. Версия 1.2.0-alpha05 содержит эти коммиты.
Внешний вклад
- Обновлено для использования сопрограмм Kotlinx 1.6.0 ( I3366d ).
Версия 1.2.0-альфа04
23 февраля 2022 г.
Выпущен androidx.compose.runtime:runtime-*:1.2.0-alpha04
. Версия 1.2.0-alpha04 содержит эти коммиты.
Изменения API
Добавлены
ComposableTarget
,ComposableTargetMarker
иComposableOpenTarget
, которые позволяют во время компиляции сообщать о том, когда компонуемая функция вызывается с таргетингом на приложение, для которого она не предназначена.В большинстве случаев аннотации могут быть выведены плагином компилятора Compose, поэтому непосредственное использование этих аннотаций должно быть редким. К случаям, которые не могут быть выведены, относятся создание и использование пользовательского приложения, абстрактных составных функций (например, методов интерфейса), полей или глобальных переменных, которые являются составными лямбда-выражениями (выводятся локальные переменные и параметры), а также при использовании
ComposeNode
или связанных составных функций.Для пользовательских приложений составные функции, которые вызывают
ComposeNode
илиReusableComposeNode
должны добавить аннотациюCompoableTarget
для функции и любых составных типов лямбда-параметров. Однако рекомендуется создать аннотацию, помеченную с помощьюComposableTargetMarker
, а затем помеченную аннотацию использовать непосредственно вместоComposableTarget
. Составная аннотация, помеченнаяComposableTargetMarker
, эквивалентнаComposbleTarget
с полным именем класса атрибута в качестве параметра применения. Пример использованияComposableTargetMarker
см.anroidx.compose.ui.UiComposable
. ( I38f11 )
Версия 1.2.0-альфа03
9 февраля 2022 г.
Выпущен androidx.compose.runtime:runtime-*:1.2.0-alpha03
. Версия 1.2.0-alpha03 содержит эти коммиты.
Изменения API
Добавлен
movableContentOf
, который преобразует составную лямбду в лямбду, которая перемещает ее состояние и соответствующие узлы в любое новое место, которое она вызывает. Когда предыдущий вызов покидает композицию, состояние временно сохраняется, и если в композицию входит новый вызов лямбды, то состояние и связанные узлы перемещаются в место нового вызова. Если новый вызов не добавлен, состояние удаляется навсегда, и помните, что наблюдатели будут уведомлены.Если лямбда-выражение
movableContentOf
вызывается несколько раз в одной и той же композиции, для каждого вызова создаются новое состояние и узлы, и по мере того, как вызовы покидают композицию и входят новые вызовы, состояние перемещается от первых покидающих вызовов к входящим вызовам в порядке их вызова. Все состояние, не востребованное новыми вызовами, удаляется навсегда. ( Ib4850 )В композицию добавлен API-интерфейс трассировки, позволяющий инструментам обеспечивать более подробную трассировку составных функций. Теперь компилятор генерирует вызовы API трассировки, которые включают исходную информацию. ( Ib0eb5 )
Чтобы удалить эти вызовы и связанную исходную информацию из сборки выпуска, добавьте следующее правило Proguard:
-assumenosideeffects public class androidx.compose.runtime.ComposerKt { boolean isTraceInProgress(); void traceEventStart(int,java.lang.String); void traceEventEnd(); }
Добавьте
InternalComposeScope
, который дает инструментам возможность идентифицировать компонуемый объект во время рекомпозиции. ( I07a3f )
Версия 1.2.0-альфа02
26 января 2022 г.
Выпущен androidx.compose.runtime:runtime-*:1.2.0-alpha02
. Версия 1.2.0-alpha02 содержит эти коммиты.
Версия 1.2.0-альфа01
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 , б/197769306 )
- Фиксированный RTL в
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 будут расширять свое пространство макета, чтобы соответствовать рекомендациям по доступности Material для сенсорного размера цели . Например, цель касания кнопки расширится до минимального размера
48x48dp
, даже если вы установите меньший размер кнопки. Это приводит Compose Material в соответствие с тем же поведением компонентов Material Design, обеспечивая единообразное поведение при смешивании представлений и Compose. Это изменение также гарантирует, что при создании пользовательского интерфейса с использованием компонентов Compose Material будут соблюдены минимальные требования к доступности сенсорной цели. - Стабильная поддержка Navigation Rail
- Стабильный уровень ряда ранее экспериментальных 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-бета01
27 октября 2021 г.
Выпущен androidx.compose.runtime:runtime-*:1.1.0-beta01
. Версия 1.1.0-beta01 содержит эти коммиты.
Версия 1.1.0-альфа06
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-альфа05
29 сентября 2021 г.
Выпущен androidx.compose.runtime:runtime-*:1.1.0-alpha05
. Версия 1.1.0-alpha05 содержит эти коммиты.
Версия 1.1.0-альфа04
15 сентября 2021 г.
Выпущен androidx.compose.runtime:runtime-*:1.1.0-alpha04
. Версия 1.1.0-alpha04 содержит эти коммиты.
Версия 1.1.0-альфа03
1 сентября 2021 г.
Выпущен androidx.compose.runtime:runtime-*:1.1.0-alpha03
. Версия 1.1.0-alpha03 содержит эти коммиты.
Новые функции
- Компилятор Compose теперь поддерживает более старые версии среды выполнения Compose (1.0). До этого изменения компилятор Compose был совместим только со средой выполнения Compose той же или более поздней версии. After this change, the Compose Compiler is compatible with an older version of the Compose Runtime (1.0). ( aosp/1796968 )
- Обновлен Compose
1.1.0-alpha03
для зависимости от Kotlin1.5.30
. ( I74545 )
Версия 1.1.0-альфа02
18 августа 2021 г.
androidx.compose.runtime:runtime-*:1.1.0-alpha02
is released. Версия 1.1.0-alpha02 содержит эти коммиты.
Версия 1.1.0-альфа01
4 августа 2021 г.
androidx.compose.runtime:runtime-*:1.1.0-alpha01
is released. Версия 1.1.0-alpha01 содержит эти коммиты.
Версия 1.0
Версия 1.0.5
3 ноября 2021 г.
androidx.compose.runtime:runtime-*:1.0.5
is released. Версия 1.0.5 содержит эти коммиты.
Исправления ошибок
- Исправлен сбой при отслеживании экземпляров производныхStateOf. ( аосп/1792247 )
Версия 1.0.4
13 октября 2021 г.
androidx.compose.runtime:runtime-*:1.0.4
is released. Версия 1.0.4 содержит эти коммиты.
Обновления зависимостей
- Обновлено в зависимости от Kotlin
1.5.31
Версия 1.0.3
29 сентября 2021 г.
androidx.compose.runtime:runtime-*:1.0.3
is released. Версия 1.0.3 содержит эти коммиты.
Обновления зависимостей
- Обновлено в зависимости от Kotlin
1.5.30
Версия 1.0.2
1 сентября 2021 г.
androidx.compose.runtime:runtime-*:1.0.2
is released. Версия 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
is released. Версия 1.0.1 содержит эти коммиты.
Обновления зависимостей
- Обновлено в зависимости от Kotlin
1.5.21
.
Версия 1.0.0
28 июля 2021 г.
androidx.compose.runtime:runtime-*:1.0.0
is released. Версия 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
. ( р/194289155 )
Версия 1.0.0-rc02
14 июля 2021 г.
androidx.compose.runtime:runtime-*:1.0.0-rc02
is released. Версия 1.0.0-rc02 содержит эти коммиты.
- Fixed race conditions in SnapshotStateObserver causing spurratic NullPointerExceptions. ( aosp/1763445 , aosp/1758105 , b/192677711 )
- Fixed issues with runtime snapshots causing
java.lang.IllegalStateException: Reading a state that was created after the snapshot was taken or in a snapshot that has not yet been applied
crashes. ( b/193006595 , b/192570897 )
Версия 1.0.0-rc01
1 июля 2021 г.
androidx.compose.runtime:runtime-*:1.0.0-rc01
is released. Версия 1.0.0-rc01 содержит эти коммиты.
Версия 1.0.0-beta09
16 июня 2021 г.
androidx.compose.runtime:runtime-*:1.0.0-beta09
is released. Версия 1.0.0-beta09 содержит эти коммиты.
Добавлены правила профиля
В этом выпуске правила профиля добавлены в следующие модули составления ( 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
is released. Версия 1.0.0-beta08 содержит эти коммиты.
Изменения API
-
State<T>
is nowState<out T>
( I69049 ) -
ControlledComposition
API change to enable recomposing changes in a recompose single pass. ( Iaafd1 , b/184173932 )
Версия 1.0.0-beta07
18 мая 2021 г.
androidx.compose.runtime:runtime-*:1.0.0-beta07
is released. Версия 1.0.0-beta07 содержит эти коммиты.
Изменения API
- Added new compose compiler APIs that allow the source information generated by the compiler to be removed during source minification. ( Ia34e6 )
Introduces
ReusableContent
which will attempt to reuse the nodes in its content instead of replacing them when the key is changed. When the key is changed the previous values in the slot table for the content is ignored except for the nodes that were generated and the values used to update the nodes.Introduces
ReusableComposeNode
that will reuse the node emitted instead of replacing it as is done forComposeNode
. ( I1dd86 )@ComposeCompilerApi
no longer@RequiresOptIn
( Iab690 )
Исправления ошибок
- LazyColumn/Row will now keep up to 2 previously visible items active (not disposed) even when they are scrolled out already. This allows the component to reuse the active subcompositions when we will need to compose a new item which improves the scrolling performance. ( Ie5555 )
Версия 1.0.0-beta06
5 мая 2021 г.
androidx.compose.runtime:runtime-*:1.0.0-beta06
is released. Версия 1.0.0-beta06 содержит эти коммиты.
Изменения API
-
@ComposeCompilerApi
no longer@RequiresOptIn
( Iab690 )
Версия 1.0.0-бета05
21 апреля 2021 г.
androidx.compose.runtime:runtime-*:1.0.0-beta05
is released. Версия 1.0.0-beta05 содержит эти коммиты.
Изменения API
- Removed
@InternalComposeApi
for recording snapshot reads and writes ( 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
is released. Версия 1.0.0-beta04 содержит эти коммиты.
Исправления ошибок
Prior to this change, local composable functions were skippable based on their parameters. After this change, no local composable functions will skip. This change is done because it is common and expected for local functions to capture parameters from the parent and them skipping is a common source of bugs.
To summarize, consider the example:
@Composable fun Counter(count: Int, onCountChange: (Int) -> Unit) { @Composable fun ShowCount() { Text("Count: $count") } ShowCount() Button(onClick={ onCountChange(count + 1) }) { Text("Increment") } }
Prior to this change, the
ShowCount
composable function would always skip, even after thecount
parameter was updated. This is no longer the case. ( I5648a )Fixed the issue when
rememberSaveable()
was restoring the old value when used with input params ( I1b110 , b/182403380 )
Версия 1.0.0-бета03
24 марта 2021 г.
androidx.compose.runtime:runtime-*:1.0.0-beta03
is released. Версия 1.0.0-beta03 содержит эти коммиты.
Изменения API
-
DefaultMonotonicFrameClock
is deprecated. CallingwithFrameNanos
orRecomposer.runRecomposeAndApplyChanges
with noMonotonicFrameClock
will now throwIllegalStateException
. ( I4eb0d )
Версия 1.0.0-beta02
10 марта 2021 г.
androidx.compose.runtime:runtime-*:1.0.0-beta02
is released. Версия 1.0.0-beta02 содержит эти коммиты.
Исправления ошибок
- Ввести ограничения на публичное использование экспериментальных API ( I6aa29 , b/174531520 ).
- Fix for broken
rememberSaveable { mutableStateOf(0) }
when used inside a destination of navigation-compose. ( I1312b , b/180042685 , b/180701630 )
Версия 1.0.0-бета01
24 февраля 2021 г.
androidx.compose.runtime:runtime-*:1.0.0-beta01
is released. Версия 1.0.0-beta01 содержит эти коммиты.
Это первый выпуск бета-версии Compose 1.0.0.
Изменения API
- Add
Recomposer.runRecomposeConcurrentlyAndApplyChanges
experimental API for recomposing invalidated compositions off the main frame loop. ( I342d0 ) - Any composables marked with @ReadOnlyComposable are now compile-time validated to ensure that they only make calls to other @ReadOnlyComposables ( I58961 )
The
defaultFactory
forcompositionLocalOf
andstaticCompositionLocalOf
is now required instead of optional.This changes removes a potential type error for non-nullable types where no default factory was provided. Previously this would provide a null reference for a non-nullable type.
For nullable types consider supplying
{ null }
as the default factory.We do not recommend using locals with non-nullable types unless a sensible default can be provided. If no sensible default exists, the
defaultFactory
lambda should throw an exception. However throwing an exception means that consumers of the local will have an implicit dependency on it being provided that is not enforced by the type system. ( Ifbd2a )Deprecated symbols were removed from the compose runtime ( I3252c )
Deprecated
emptyContent()
is removed. Use{}
instead. ( Idb33f , b/179432510 )Providers has been renamed to CompositionLocalProvider
- The Composition constructor no longer accepts a key parameter, and has been deprecated.
- currentCompositeKeyHash has been turned into a composable top level property instead of a composable top level function.
- CompositionData and CompositionGroup have been moved to the androidx.compose.runtime.tooling namespace
- ComposableLambda has been made an interface instead of a concrete class, and no longer has type parameters.
- ComposableLambdaN has been made an interface instead of a concrete class, and no longer has type parameters.
- The snapshotFlow function has been moved to the androidx.compose.runtime namespace
- the merge method of SnapshotMutationPolicy is no longer experimental
- The @TestOnly top level clearRoots function has been removed. It is no longer necessary.
- keySourceInfoOf and resetSourceInfo functions have been removed. They are no longer necessary.
- Composer.collectKeySourceInformation has been removed. It is no longer necessary.
- isJoinedKey, joinedKeyLeft, and joinedKeyRight methods have been removed. They are no longer necessary.
- Various top level APIs have been moved and reorganized into different files. Due to Kotlin's file class semantics, this will break binary compatibility but not source compatibility, so should not be an issue for most users.
- ( I99b7d , b/177245490 )
SnapshotStateObserver is not Experimental anymore ( Id2e6a )
Deleted some previously deprecated APIs ( Ice5da , b/178633932 )
Made the following Material API changes:
- Added contentPadding parameter to Top/BottomAppBar to allow customizing the default padding.
- Reordered parameters in BackdropScaffold to follow API guidelines for required parameters being before optional parameters.
- Moved
icon
parameter in BottomNavigationItem to be afterselected
andonClick
. - Renamed
alwaysShowLabels
parameter in BottomNavigationItem toalwaysShowLabel
. - Renamed
bodyContent
parameters in a few components to justcontent
. - Reordered parameters in
ButtonDefaults.buttonColors()
. Please note that because the type of the parameters have not changed, this will not cause an error in your code - please ensure you are either using named parameters or update the ordering manually, otherwise your code will not work the same as previously. - Added
secondaryVariant
parameter todarkColors()
. This color is typically the same assecondary
in dark theme, but adding for consistency and further customization. - Removed ElevationDefaults and animateElevation() from the public API surface since they were not commonly used / useful.
- Renamed
onValueChangeEnd
inSlider
toonValueChangeFinished
and made it nullable. - Renamed
text
parameter inSnackbar
tocontent
for consistency. - Added
contentPadding
parameter toDropdownMenuItem
to allow customizing the default padding and madecontent
be an extension onRowScope
. - Renamed
ModalDrawerLayout
toModalDrawer
. - Renamed
BottomDrawerLayout
toBottomDrawer
. - ( I1cc66 )
Версия 1.0.0-альфа12
10 февраля 2021 г.
androidx.compose.runtime:runtime-*:1.0.0-alpha12
is released. Версия 1.0.0-alpha12 содержит эти коммиты.
Изменения API
- Support for ViewGroups was removed from UiApplier. The Deprecated emitView composables were removed. ( Ifb214 )
- CompositionReference renamed to CompositionContext ( I53fcb )
- ComponentActivity.setContent has moved to androidx.activity.compose.setContent in the androidx.activity:activity-compose module. ( Icf416 )
- Snapshot API was updated to be more consistent with API guideline as well as hiding internal implementation classes from the public API. ( Id9e32 )
- Renamed Ambients to match the Ambient -> CompositionLocal rename. Ambients used to be named AmbientFoo, now CompositionLocals are named LocalFoo. ( I2d55d )
- Renamed Ambient to CompositionLocal, and ambientOf / staticAmbientOf to compositionLocalOf / staticCompositionLocalOf respectively. This change helps to make the purpose of CompositionLocal more clear: a mechanism for providing / retrieving values local to a composition. CompositionLocal instances should be prefixed with
Local
, such as val LocalFoo = compositionLocalOf { Foo() }. ( Ia55b6 ) - takeMutableSnapshot and takeSnapshot have moved to be companion methods of Snapshot. ( I91f19 )
@ComposableContract
has been deprecated in favor of three more specific annotations.@ComposableContract(restartable = false)
has become@NonRestartableComposable
@ComposableContract(readonly = true)
has become@ReadOnlyComposable
@ComposableContract(preventCapture = true)
has become@DisallowComposableCalls
@ComposableContract(tracked = true)
has been removed. ( I60a9d )emptyContent() and (@Composable () -> Unit).orEmpty() utilities have been deprecated as they no longer have any positive performance impact or value ( I0484d )
snapshotFlow
andwithMutableSnapshot
are no longer experimental ( I6a45f )Recomposers can now be closed. Closed recomposers will continue recomposition until composition child coroutines complete. Recomposer.shutDown renamed to cancel to contrast with close. ( Ib6d76 )
The
compose:runtime-dispatch
artifact is now deprecated. MonotonicFrameClock can now be found in compose:runtime and AndroidUiDispatcher can be found in compose:ui. ( Ib5c36 )The API the Compose compiler plugin targets has been refactored to use an interface instead of a concrete class. The interface also no longer uses a type parameter.
This is an internal change that should not effect source code compatibility but is a binary breaking change. ( I3b922 , b/169406779 )
SnapshotMutableState was introduced ( Icfd03 )
DisposableEffectDisposable was renamed to DisposaleEffectResult ( Ica7c6 )
Removed Recomposer.current(). [Abstract]ComposeView now default to lazily created, window-scoped Recomposers driven by the ViewTreeLifecycleOwner for the window. Recomposition and withFrameNanos-based animation ticks are paused while the host Lifecycle is stopped. ( I38e11 )
Recomposer.runningRecomposers now offers a global StateFlow of read-only RecomposerInfo for observing ongoing composition state in the process. Prefer this API to Recomposer.current(), which is now deprecated. ( If8ebe )
DisposableEffectDisposable was renamed to DisposaleEffectResult ( I3ea68 )
Version 1.0.0-alpha11
28 января 2021 г.
androidx.compose.runtime:runtime-*:1.0.0-alpha11
is released. Version 1.0.0-alpha11 contains these commits.
Изменения API
- onCommit, onDispose, and onActive have been deprecated in favor of SideEffect and DisposableEffect APIs ( If760e )
- The emit() API and all overloads have been deprecated and renamed to ComposeNode. The APIs are identical, just a different name in order to follow the naming conventions of Compose ( I4137b )
- invalidate and compositionReference() are now deprecated in favor of currentRecomposeScope and rememberCompositionReference respectively. ( I583a8 )
RememberObserver replaces CompositionLifecycleObserver and CompositionLifecycleObserver is now deprecated.
RememberObserver
is a replacement forCompositionLifecycleObserver
with modified semantics and renamed methods. Changing to the new API can be done mechanically for objects that are only remembered once which is, and continues to be, the recommended practice. However, if a reference was remembered more than once in a compositiononRemembered
is called for each reference whereonEnter
is only called once.onEnter
was called multiple time if the object was used in subcompositions, such asWithConstraints
andScaffold
making the singleonEnter
call guarantee unreliable and it was removed forRememberObserver
.RememberObserver
addsonAbandoned
which is called if theRememberObserver
instance is returned from the callback passed toremember
but was not remembered in the composition state and, therefore, will never haveonRemembered
called. This can occur if an exception terminates composition before completing or the composition is discarded because the state is was producing a composition for is no longer current or otherwise is no longer needed. If the instance ofRememberObserver
following the single reference recommendation above is tracking an external resource bothonForgotten
andonAbandoned
each indicate that the resource is no longer needed. If the object is tracking work started or resources allocated inonRemembered
,onAbandoned
can be ignored as it will not be called ifonRemembered
is called. ( I02c36 )Do not mark
collectAsState()
functions as inline ( Ia73e4 )
Исправления ошибок
- WithConstraints was reworked as BoxWithConstraints and moved to foundation.layout. ( I9420b , b/173387208 )
- Leverage TestCoroutineDispatcher in testing ( I532b6 )
Version 1.0.0-alpha10
13 января 2021 г.
androidx.compose.runtime:runtime-*:1.0.0-alpha10
is released. Version 1.0.0-alpha10 contains these commits.
Breaking Change
Restructuring of the internal compiler API allows batching changes to the nodes generated as a result of composition into the "apply changes" phase of composition, after all
@Composable
functions have completed.This is a behavioral breaking change that might affect application code as nodes are no longer available from internal and experimental APIs until after changes have been applied. This can usually be worked around by surrounding code with such dependencies in a
SideEffect
composable to defer execution of the code until after the nodes have been created and initialized. ( I018da )
Изменения API
- Added a way to track if the recomposer has applied changes. ( I1b3e2 )
Expand [Abstract]ComposeView APIs to allow recycling Compose-based views, disposing their composition to recreate again later. Add APIs for installing and discovering window-scoped Recomposers and CompositionReferences for creating child compositions.
Add ViewCompositionStrategy for configuring the composition disposal strategy of [Abstract]ComposeViews; default behavior is dispose on window detach. ( I860ab )
Исправления ошибок
- Recomposer now exposes a Flow of its current state, allowing monitoring its activity and the activity of associated effects. ( Ifb2b9 )
- The native keyEvent can now be accessed through keyEvent.nativeKeyEvent ( I87c57 , b/173086397 )
Version 1.0.0-alpha09
16 декабря 2020 г.
androidx.compose.runtime:runtime-*:1.0.0-alpha09
is released. Version 1.0.0-alpha09 contains these commits.
Изменения API
Removed SlotTable, SlotReader and SlotWriter from the public API. These were marked as InternalComposeAPI previously. Now they are internal to the compose module.
CompositionData and CompositionGroup were added as a replacement for the ui-tooling API to use to extract composition information. These are public but are not intended for use outside the ui-tooling API as they provide the raw information the ui-tooling API interprets ( I31a9c )
The Applier class is no longer considered an ( Id85b0 )
The
Applier
interface has changed to simplify building trees bottom-up instead of top-down.The
insert()
method has been renamed toinsertTopDown()
.A new method,
insertBottomUp()
, was added.An applier either inserts nodes into the tree it is editing using
insertTopDown()
orinsertBottomUp()
depending on which performs better.Some trees, such as
LayoutNode
andView
, are much more efficient to build bottom-up than top-down. Prior to this change, a stack of inserts was required to implement bottom-up which needed to be copied to every applier which needed bottom-up construction for performance. With this change anApplier
overridesinsertBottomUp()
to build a tree bottom-up andinsertTopDown()
to build the tree top-down. ( Icbdc2 )Compose supports property getters that can make composable invocations. Support for this is not going away, but the syntax for declaring a property getter as being @Composable is changing.
The now-deprecated syntax for doing this was by annotating the property itself:
@Composable val someProperty: Int get() = ...
The now-correct syntax for doing this is by annotating the getter of the property:
val someProperty: Int @Composable get() = ...
Both syntaxes will work for some time, but the former deprecated syntax will eventually become a compile error. ( Id9197 )
Исправления ошибок
- AndroidOwner made internal ( Ibcad0 , b/170296980 )
- subcomposeInto(LayoutNode) was made internal ( Id724a )
Version 1.0.0-alpha08
2 декабря 2020 г.
androidx.compose.runtime:runtime-*:1.0.0-alpha08
is released. Version 1.0.0-alpha08 contains these commits.
Изменения API
- Added lint check for composable lambda parameter naming and position, to check for consistency with Compose guidelines. Also migrated some APIs using
children
as the name for their trailing lambda tocontent
, according to the lint check and guidance. ( Iec48e ) - Recomposer no longer accepts an EmbeddingContext; required scheduling dependencies are obtained from the effectCoroutineContext. FrameManager is deprecated; platform integrations should initialize their own global snapshot handling. ( I02369 )
- RestorableStateHolder.withRestorableState function was renamed to RestorableStateProvider ( I66640 )
Исправления ошибок
- Deprecated Ambients named with
Ambient
as their suffix, and replaced them with new properties prefixed with Ambient, following other Ambients and Compose API guidelines. ( I33440 ) - Remove old ui-test module and its stubs ( I3a7cb )
Version 1.0.0-alpha07
11 ноября 2020 г.
androidx.compose.runtime:runtime-*:1.0.0-alpha07
is released. Version 1.0.0-alpha07 contains these commits.
Новые функции
Изменения API
- The
@UnionType
annotation has been deprecated ( I57cde ) - provideDefault was added as an alternative to provide for providing ambients, and it can be used to specify ambient values that will only be set when there is no ambient value already provided. ( Id6635 , b/171024925 )
- LaunchedTask was renamed to LaunchedEffect for consistency with the SideEffect and DisposableEffect APIs. LaunchedEffect with no subject params is not permitted in order to encourage best practices. ( Ifd3d4 )
- Applier now has onBeginChanges/onEndChanges callbacks that are invoked when a Composer begins/is finished applying changes to the tree. These may be used for batching resource management if needed. ( Icf476 )
- Recomposer now requires a CoroutineContext at construction ( Ic4610 )
- Changes to the internal SlotTable implementation which should not affect the public API. ( If9828 )
- Deprecated rxjava2 adapters which does not take the initial value were removed ( Idb72f )
Исправления ошибок
- foundation.Text has been deprecated and replaced with material.Text. For a basic, unopinionated text API that does not consume values from a theme, see androidx.compose.foundation.BasicText. ( If64cb )
- BaseTextField has been deprecated. Use BasicTextField instead. ( I896eb )
- Several layout related symbols were moved from androidx.compose.ui to androidx.compose.layout.ui. ( I0fa98 , b/170475424 )
Внешний вклад
- Added
runtime-rxjava3
module for compose. Similar toruntime-rxjava2
( I02cbf )
Version 1.0.0-alpha06
28 октября 2020 г.
androidx.compose.runtime:runtime-*:1.0.0-alpha06
is released. Version 1.0.0-alpha06 contains these commits.
Изменения API
- Recomposer is now a CompositionReference and a valid composition parent. Explicit Recomposer is now required in fewer places. ( I4036f )
- Added DisposableEffect counterpart API to SideEffect, filling the role of onCommit-with-params but with a required onDispose.
- Added rememberUpdatedState API to publish data from recomposition to ongoing or long-lived processes such as DisposableEffects or LaunchedTasks.
- ( Id50b9 )
- MutableVector now implements RandomAccess ( I85d73 , b/170461551 )
- Added SideEffect composable for applying side effects of composition to objects managed by the composition. SideEffect is intended to replace the onCommit composable. ( Ia77c2 )
- New experimental api RestorableStateHolder. It allows to save the state defined with [savedInstanceState] and [rememberSavedInstanceState] for the subtree before disposing it to make it possible to compose it back next time with the restored state. ( I66884 , b/166586419 )
Исправления ошибок
- Enable transitions in ComposeTestRule; remove option to enable the blinking cursor from ComposeTestRule. ( If0de3 )
Version 1.0.0-alpha05
14 октября 2020 г.
androidx.compose.runtime:runtime-*:1.0.0-alpha05
is released. Version 1.0.0-alpha05 contains these commits.
Изменения API
- Experimental Modifier.pointerInput suspending input modifier ( Ia77d2 )
- The scrolling performance of LazyColumn/Row is improved by doing less work in subcomposition on every scroll. The new hasInvalidations() method was added for Composition class. hasPendingChanges() method from Recomposer was renamed to hasInvalidations() ( Ib2f32 , b/168293643 , b/167972292 , b/165028371 )
- Add produceState API for launching coroutines from composition that update a single
State<T>
value over time ( Id4a57 ) - launchInComposition renamed to LaunchedTask to match Compose API guidelines ( I99a8e )
- The order of place() calls in custom Layouts now defines the drawing order for the children ( Ibc9f6 )
Version 1.0.0-alpha04
October 1, 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha04
is released. Version 1.0.0-alpha04 contains these commits.
Изменения API
- Added OwnerScope to allow collection of layout and drawing observation scopes once they are no longer valid. ( Ic4cf8 )
- Added derivedStateOf API to create State objects based on a calculation which may read (and derive from) other State objects ( If758b )
- Added TestOnly API for SnapshotStateObserver ( I6e2a9 )
Исправления ошибок
- foundation.Box was deprecated. Please use foundation.layout.Box instead. ( Ie5950 , b/167680279 )
Version 1.0.0-alpha03
16 сентября 2020 г.
androidx.compose.runtime:runtime-*:1.0.0-alpha03
is released. Version 1.0.0-alpha03 contains these commits.
Изменения API
-
CompositionCoroutineScope
no longer implementsMonotonicFrameClock
. Callers ofwithFrameNanos
should import the top-level function explicitly. ( Icb642 , b/166778123 )
Исправления ошибок
- Global testing functions such as
onNode
orwaitForIdle
are now deprecated, please migrate to their new counterparts that are defined on ComposeTestRule ( I7f45a ) -
launchInComposition
no longer launches coroutines undispatched ( Ief6af , b/166486000 )
Version 1.0.0-alpha02
2 сентября 2020 г.
androidx.compose.runtime:runtime-*:1.0.0-alpha02
is released. Version 1.0.0-alpha02 contains these commits.
Изменения API
- Add
snapshotFlow
andwithMutableSnapshot
APIs for consuming and producing Snapshot data changes. ( I3e722 ) The calling convention for composable functions has changed. This is a binary breaking change. All libraries must be recompiled to work with this version of the compose compiler plugin.
This change does not create a source level breaking change as the only APIs that have changed are compiler APIs that have an explicit opt in. ( I7afd2 , b/158123185 )
Removed scheduling methods from EmbeddingContext ( I7b9be )
onPreCommit is deprecated; onCommit now has onPreCommit's behavior.
onCommit and onActive now run in the same choreographer frame that the composition changes committed in rather than at the beginning of the next choreographer frame. ( I70403 )
Version 1.0.0-alpha01
26 августа 2020 г.
androidx.compose.runtime:runtime-*:1.0.0-alpha01
is released. Version 1.0.0-alpha01 contains these commits.
Version 0.1.0-dev
Version 0.1.0-dev17
19 августа 2020 г.
androidx.compose.runtime:runtime-*:0.1.0-dev17
is released. Version 0.1.0-dev17 contains these commits.
Изменения API
- Custom emits can now declare that one or more of its setters can be skipped and recomposed independently of the emit. ( Ibbd13 )
Removed deprecated FrameManager calls.
Internal compose APIs have been changed to reduce the amount of overhead to track state objects such as
mutableStateof()
( I80ba6 )The
state { ... }
composable is now deprecated in favor of explicit calls toremember { mutableStateOf(...) }
for clarity. This reduces the overall API surface and number of concepts for state management, and matches theby mutableStateOf()
pattern for class property delegation. ( Ia5727 )Flow.collectAsState now determines the default dispatcher from the composition itself rather than defaulting to Dispatchers.Main. ( I9c1d9 )
Crash when something which saves the state was used inside the for loop is fixed. Now having the same key in savedInstanceState() is allowed, api of UiSavedStateRegistry is now adjusted to this new requirement ( I4ab76 , b/160042650 , b/156853976 , b/159026663 , b/154920561 )
Исправления ошибок
-
emitView
was deprecated. UseAndroidView
instead if possible for emitting Views inside Compose. Note that composing Views and ViewGroups directly will not be supported in the future unless these are leaves in the composition tree, case when this can be achieved using AndroidView. ( I29b1e , b/163871221 )
Version 0.1.0-dev16
5 августа 2020 г.
androidx.compose.runtime:runtime-*:0.1.0-dev16
is released. Version 0.1.0-dev16 contains these commits.
Изменения API
The default mutation policy of
mutableStateOf()
,ambientOf()
andsavedInstanceStateOf()
has changed to bestructuralEqualityPolicy()
instead ofreferentialEqualityPolicy()
.The default for deciding if a new value assigned to a
mutableStateOf()
instance is considered a change now defaults to using==
instead of using===
.See https://kotlinlang.org/docs/reference/equality.html
ambientOf()
andsavedInstanceStateOf()
usemutableStateOf()
in their implementations so they were changed to be consistent withmutableStateOf()
.Using structural equality more closely matches developer expectations.
Например,
val state = mutableStateOf(1f)
с последующим,
state.value = 1f
will no longer be consider a change to
state
and uses ofstate
during composition will no longer need to be recomposed.This is a breaking change but, in most cases (such when using classes that do not override
equals()
), this will not have a noticeable effect on an application.Classes that do override
equals()
, such asdata
classes, might see a performance degradation as theirequals()
methods are now, by default, called when assigned to amutableStateOf()
.The previous behavior can be restored by adding the policy parameter
policy = referentialEqualityPolicy()
to calls tomutableStateOf()
,ambientOf()
andsavedInstanceStateOf()
. ( Ic21a7 )Row
andColumn
are now inline function significantly reducing the overhead of using them. ( I75c10 )
Исправления ошибок
- setViewContent was deprecated. setContent should be used instead. ( I7e497 , b/160335130 )
Added MonotonicFrameAnimationClock that enables you to use a MonotonicFrameClock as an AnimationClockObservable to bridge the gap between the new coroutines based clocks and APIs that still use the old callback based clocks.
The MonotonicFrameClock equivalent of ManualAnimationClock is now ManualFrameClock. ( I111c7 , b/161247083 )
Modifier.stateDraggable was completely reworked and renamed to Modifier.swipeable. A new SwipeableState class was introduced, and DrawerState and BottomDrawerState were refactored to inherit from it. [Modal/Bottom]DrawerLayout no longer take an onStateChange parameter. ( I72332 , b/148023068 )
Modifier.plus has been deprecated, use Modifier.then instead. 'Then' has a stronger signal of ordering, while also prohibits to type
Modifier.padding().background() + anotherModifier
, which breaks the chain and harder to read ( Iedd58 , b/161529964 )SubcomposeLayout is added. It is a low level primitive which allows to compose the children during the measuring if we want to use some values available only later during the measure for the subtree composition. For example WithConstraints is not implemented using SubcomposeLayout. ( I25cc8 )
Material FilledTextField was renamed to TextField and foundational TextField was renamed to BaseTextField to make simplest desired API easy to discover and use ( Ia6242 , b/155482676 )
Modifier.drawBackground has been renamed to Modifier.background ( I13677 )
Version 0.1.0-dev15
22 июля 2020 г.
androidx.compose.runtime:runtime-*:0.1.0-dev15
is released. Version 0.1.0-dev15 contains these commits.
Dependencies Update
- To use the
0.1.0-dev15
version of Compose, you will need to update your dependencies according to the new code snippets shown above in Declaring dependencies .
Изменения API
@Model
annotation is now deprecated. Use state and mutableStateOf as alternatives. This deprecation decision was reached after much careful discussion.Обоснование
Rationale includes but is not limited to:
- Reduces API surface area and concepts we need to teach
- More closely aligns with other comparable toolkits (Swift UI, React, Flutter)
- Reversible decision. We can always bring
@Model
back later. - Removes corner-case usage and difficult to answer questions about configuring
@Model
as things we need to handle -
@Model
data classes, equals, hashcode, etc. - How do I have some properties “observed” and others not?
- How do I specify structural vs. referential equality to be used in observation?
- Reduces “magic” in the system. Would reduce the likelihood of someone assuming system was smarter than it is (ie, it knowing how to diff a list)
- Makes the granularity of observation more intuitive.
- Improves refactorability from variable -> property on class
- Potentially opens up possibilities to do hand-crafted State-specific optimizations
- More closely aligns with the rest of the ecosystem and reduces ambiguity towards immutable or us “embracing mutable state”
Migration Notes
Almost all existing usages of
@Model
are fairly trivially transformed in one of two ways. The example below has a@Model
class with two properties just for the sake of example, and has it being used in a 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 } ) }
Alternative 1: Use
State<OriginalClass>
and create copies.This approach is made easier with Kotlin's data classes. Essentially, make all previously
var
properties intoval
properties of a data class, and then usestate
instead ofremember
, and assign the state value to cloned copies of the original using the data classcopy(...)
convenience method.It's important to note that this approach only works when the only mutations to that class were done in the same scope that the
State
instance is created. If the class is internally mutating itself outside of the scope of usage, and you are relying on the observation of that, then the next approach is the one you will want to use.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) } ) }
Alternative 2: Use mutableStateOf and property delegates
This approach is made easier with Kotlin's property delegates and the
mutableStateOf
API which allows you to create MutableState instances outside of composition. Essentially, replace allvar
properties of the original class withvar
properties withmutableStateOf
as their property delegate. This has the advantage that the usage of the class will not change at all, only the internal implementation of it. The behavior is not completely identical to the original example though, as each property is now observed/subscribed to individually, so the recompositions you see after this refactor could be more narrow (a good thing).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 )
Changes the code generation strategy of Compose's compiler. Prior to the change, the compose compiler would transform calls to composable functions. With this change, we now transform the body of a composable function and leave the callsite unaltered (mostly).
This means that most of the logic communicating with the compose runtime happens at the start of the function body, instead of at the callsite.
This should be a source-compatible change for all usage of compose. Most users of compose should not have to update any code as a result of this change.
In order to support this work, the JVM signature of all composable functions has changed. A Composable function accepting a single parameter is transformed into a function accepting 3 parameters, the additional parameters are the Composer, a 'key' integer. a bitmask integer used to propagate metadata through calls.
Compose now also transforms default arguments to a composable function. It does this without introducing an additional synthetic default overload of the function itself, so this change will result in fewer functions being defined.
Known intentional behavioral changes resulting from this:
- Some calls will skip where they wouldn't have previously
- Composable expressions in default argument expressions are now correctly subscribed to and handled
This work included some optimizations: 1. The result of comparisons of parameters are propagated through the call graph to other composable functions. This will result in fewer comparisons at runtime, reduces the slot table size, as well as more skipping of composable functions that were previously not skipped 2. Paremeters which are determined to be “static” at compile time are no longer compared or stored in the runtime. This reduces the number of comparisons and reduces slot table size. 3. Control flow structure of the body of functions is used to minimize the number of groups that are generated. This reduces slot table size and results in less work for the runtime 4. Unused dispatch and receiver parameters to functions are not included in determining skippability of the function if they are not used inside of the body of the function.
Most breaking changes were for APIs that the compiler targets directly, and typical use of compose will not be affected: 1. Composer::startExpr was removed 2. Composer::endExpr was removed 3. Composer::call was deprecated 4. The non-varargs overloads of
key
have been removed. Use thevararg
version going forward. 5. The Pivotal annotation was deprecated. Usekey
as a replacement. 6. ScopeUpdateScope::updateScope was changed to expect a Function3 instead of Function1 7. restartableFunction and restartableFunctionN were updated to include additional compile time parameters ( I60756 , b/143464846 )Added sortWith and removeRange to MutableVector ( Icccf7 )
Added default method implementations for CompositionLifecycleObserver ( I24289 )
Applier now requires a clear() method for disposing compositions ( Ibe697 )
Added asMutableList() to MutableVector to allow it to be passed to public API without having to copy the entire list. ( I298df )
Added rememberCoroutineScope() to obtain a managed CoroutineScope in composition for launching jobs in response to events. ( I0e264 )
MutableVector is a new collection that does not implement any of the standard Collection interface. This collection offers speed above other requirements and is intended to only be used in internal implementations. ( I8ebd6 )
Temporarily removed
StableMutableList
andStableMutableMap
to avoid an issue in the version of Kotlin compose requires. These interfaces will be reintroduced once compose is updated to a version of Kotlin that doesn't have the issue.SnapshotStateList
andSnapshotStateMap
are now public but they will be deprecated onceStableMutableList
andStableMutableMap
are restored. ( Ia7769 )add top-level withFrameNanos function for animation timing ( Ie34c5 )
@Untracked annotation has been deprecated. Replace with @ComposableContract(tracked=false) ( Id211e )
RestartableFunction and associated APIs have been renamed to ComposableLambda, etc. These APIs were targeted only by the compiler so this should not affect source level compatibility normally. The rename was done primarily to communicate what this class is better when it shows up in stack traces ( I7eb25 )
@Composable annotation is no longer valid on classes ( Ia5f02 )
Ambient<T>
is now @Stable instead of @Immutable ( I0b4bb )Prior to this change, the compose compiler plugin would non-trivially intercept calls to constructors inside of a @Composable function if there was an ( I5205a , b/158123804 )
The Recompose composable is no longer a useful abstraction. Most recomposition should happen as a result of MutableState assignments. For anything beyond that, it is recommended that you use the
invalidate
function to trigger a recomposition of the current scope. ( Ifc992 )Observe is no longer a useful abstraction. If you need to replicate it, its implementation can be replicated by just creating a composable function which executes a composable lambda parameter. For example,
@Composable fun Observe(body: @Composable () -> Unit) = body()
( I40d37 )@Direct was deprecated in favor of @ComposableContract(restartable=false) ( If4708 )
Added an adapter for the recently introduced StateFlow which allows as to pre-populate the initial value so the returned State is non-nullable ( I61dd8 , b/156233789 )
Added an adapter for Flow. Example of the usage: val value by flow.collectAsState() ( If2198 , b/153375923 )
[Mutable]State property delegate operators moved to extensions to support Kotlin 1.4 property delegate optimizations. Callers must add imports to continue using
by state { ... }
orby mutableStateOf(...)
. ( I5312c )androidx.compose.ViewComposer has been moved to androidx.ui.node.UiComposer androidx.compose.Emittable has been removed. It was redundant with ComponentNode. androidx.compose.ViewAdapters has been removed. They are no longer a supported use case. Compose.composeInto has been deprecated. Use
setContent
orsetViewContent
instead. Compose.disposeComposition has been deprecated. Use thedispose
method on theComposition
returned bysetContent
instead. androidx.compose.Compose.subcomposeInto has moved to androidx.ui.core.subcomposeInto ComponentNode#emitInsertAt has been renamed to ComponentNode#insertAt ComponentNode#emitRemoveAt has been renamed to ComponentNode#removeAt ComponentNode#emitMode has been renamed to ComponentNode#move ( Idef00 )Updated the
ComposeFlags.COMPOSER_PARAM
flag to betrue
, which will change the code generation strategy for the compose plugin. At a high level, this causes @Composable functions to be generated with an additional synthetic parameter, which is passed through to subsequent @Composable calls in order for the runtime to properly manage execution. This is a significant binary breaking change, however, should preserve source-level compatibility in all sanctioned usage of compose. ( I7971c )Breaking changes to the ambients API. See log and
Ambient<T>
documentation for details ( I4c7ee , b/143769776 )Added ui-livedata - new artifact with an adapter for LiveData. Example of the usage: val value by liveData.observeAsState() ( Ie9e8c , b/150465596 )
Rx adapters without explicit initial value are deprecated. Using null is not always the best default, for example when you have a List it is better to start with emptyList() or any other reasonable default ( I00025 , b/161348384 )
Added ui-rxjava2 - new artifact with adapters for RxJava2. Example of the usage: val value by observable.subscribeAsState() ( Ifab4b , b/153369097 )
savedInstanceState()
can now be used with nullable types ( I6847f , b/153532190 )New listSaver() and mapSaver() to make it easier to write custom Saver objects ( I8cf68 , b/152331508 )
New functions: savedInstanceState() and rememberSavedInstanceState(). They are similar to state() and remember() but have a saved instance state support build in ( If1987 , b/152025209 )
Исправления ошибок
-
runOnIdleCompose
renamed torunOnIdle
( I83607 ) - Made LayoutNode experimental API ( I4f2e9 )
- androidx.ui.foundation.TextFieldValue and androidx.ui.input.EditorValue is deprecated. TextField, FilledTextField and CoreTextField composables that uses that type is also deprecated. Please use androidx.ui.input.TextFieldValue instead ( I4066d , b/155211005 )
- Removed deprecated DrawBackground API in favor of drawBackground extension APIs on Modifier. Refactored color, brush and paint drawBackground implementations to reduce code paths as well as remove requirement for Modifier to be created as part of composition. ( I0343a )
- Updated higher level compose APIs that expose a Canvas to expose CanvasScope instead. This removes the need for consumers to maintain their own Paint objects. For consumers that still require access to a Canvas they can use the drawCanvas extension method which provides a callback to issue drawing commands with the underlying Canvas. ( I80afd )
- WithConstraints trailing lambda API has been changed. Now instead of two params it has a receiver scope which in addition to constraints and layoutDirection provides minWidth, maxWidth, minHeight and maxHeight properties in Dp ( I91b9a , b/149979702 )
- Added symmetric padding modifier. ( I39840 )
- Updated wrapContentWidth and wrapContentHeight to expect vertical or horizontal Alignment rather than any Alignment. The gravity modifier was updated to accept vertical or horizontal Alignment. Row, Column and Stack were updated to support custom continuous Alignments. ( Ib0728 )
- ui-text module is renamed as ui-text-core ( I57dec )
- Improve DrawModifier API:
- Made the receiver scope for draw() ContentDrawScope
- Removed all parameters on draw()
- DrawScope has same interface as former CanvasScope
- ContentDrawScope has drawContent() method ( Ibaced , b/152919067 )
- ColoredRect has been deprecated. Use
Box(Modifier.preferredSize(width, height).drawBackground(color))
instead. ( I499fa , b/152753731 ) - Replaced Modifier plus operator with factory extension functions ( I225e4 )
- RowScope and ColumnScope members are now accessible outside Row and Column. ( I3a641 )
- Renamed LayoutFlexible to LayoutWeight. Renamed tight parameter to fill. ( If4738 )
- WithConstraints got LayoutDirection parameter ( I6d6f7 )
- Renamed background to DrawBackground and make it to be memorized by default ( Ia0bd3 )
- Replaced ButtonStyle with distinct functions and removed text (string) overload. See updated samples for usage information. ( If63ab , b/146478620 , b/146482131 )
-
runOnIdleCompose
andrunOnUiThread
are now global functions instead of methods on ComposeTestRule. ( Icbe8f )
Внешний вклад
- Remove unneeded API such as Looper and Handler from Compose Runtime porting layer ( I6847d )
- Deprecate
Flow<T>.collectAsState()
with no initial value. UseStateFlow<T>
or pass an explicit initial value instead. ( I63f98 , b/157674865 )