Составить среду выполнения

Основные строительные блоки модели программирования Compose и управления состоянием, а также основная среда выполнения для целевого плагина компилятора Compose.
Последнее обновление Стабильный релиз Кандидат на релиз Бета-версия Альфа-релиз
16 июля 2025 г. 1.8.3 - 1.9.0-бета03 -

Структура

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 вашего приложения или модуля:

Groovy

dependencies {
    implementation "androidx.compose.runtime:runtime:1.8.3"
    implementation "androidx.compose.runtime:runtime-livedata:1.8.3"
    implementation "androidx.compose.runtime:runtime-rxjava2:1.8.3"
}

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.15"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Kotlin

dependencies {
    implementation("androidx.compose.runtime:runtime:1.8.3")
    implementation("androidx.compose.runtime:runtime-livedata:1.8.3")
    implementation("androidx.compose.runtime:runtime-rxjava2:1.8.3")
}

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.9

Версия 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 содержит следующие коммиты.

Исправления ошибок

  • Отменить авторизацию составных лямбда-выражений в подкомпозициях в одном кадре. ( 98301c )
  • Вызовите обратный вызов onRelease в том же порядке, что и onForgotten . ( 2cd790 )
  • Фильтровать измененные состояния, которые не наблюдаются в snapshotFlow . ( 796b80 )

Улучшения производительности

  • Измените наблюдателя снимка на месте, когда он уже прозрачен. ( f60f30 )
  • Оптимизировать 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 , b/254645321 )
  • Жизненные циклы RememberObserver запускаются только в том случае, если они сохранены в расчетах Remember. ( f6b4dc )
  • Ограничить захват $dirty встроенными лямбда-выражениями. ( acfca0 )
  • Исправлена ошибка, из-за которой перемещаемый контент иногда получал неправильные локальные композиции. ( 035cd6 )

Версия 1.6.0-rc01

10 января 2024 г.

Выпущена androidx.compose.runtime:runtime-*:1.6.0-rc01 . Версия 1.6.0-rc01 содержит следующие коммиты.

Версия 1.6.0-beta03

13 декабря 2023 г.

Выпущена androidx.compose.runtime:runtime-*:1.6.0-beta03 . Версия 1.6.0-beta03 содержит следующие коммиты.

Версия 1.6.0-beta02

29 ноября 2023 г.

Выпущена androidx.compose.runtime:runtime-*:1.6.0-beta02 . Версия 1.6.0-beta02 содержит следующие коммиты.

Версия 1.6.0-beta01

15 ноября 2023 г.

Выпущена androidx.compose.runtime:runtime-*:1.6.0-beta01 . Версия 1.6.0-beta01 содержит следующие коммиты.

Изменения API

  • Распространить определенные значения стабильности в аннотации. (274a4c)

Исправления ошибок

  • Использовать ссылочную политику для составления локального состояния области действия в контексте. (83361c)
  • Ограничить захват $dirty встроенными лямбда-выражениями. (acfca0)
  • Исправлена ошибка, из-за которой перемещаемый контент иногда получал неправильные локальные композиции. (035cd6)
  • Используйте более быстрые хэш-карты без выделения памяти в RecomposeScopeImpl . (d79494)
  • Используйте ObjectIntMap в DerivedState . (21862e)
  • Используйте IntRef для int SnapshotThreadLocal в DerivedState . (04eaf4)

Версия 1.6.0-альфа08

18 октября 2023 г.

Выпущена androidx.compose.runtime:runtime-*:1.6.0-alpha08 . Версия 1.6.0-alpha08 содержит следующие коммиты.

Исправления ошибок

  • Жизненные циклы RememberObserver запускаются только в том случае, если они сохранены в расчетах Remember. ( 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 , b/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 , B/2528446775 )

Версия 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 , b/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 , B/254645321 )
  • Снижение распределения при применении снимков. ( I65c09 )
  • Избегайте расчета readableHash в DerivedState , если снимок не был изменен ( 68C565 )

Версия 1.5

Версия 1.5.4

18 октября 2023 г.

androidx.compose.runtime:runtime-*:1.5.4 выпущен. Версия 1.5.4 содержит эти коммиты.

Версия 1.5.3

4 октября 2023 г.

androidx.compose.runtime:runtime-*:1.5.3 выпущен. Версия 1.5.3 содержит эти коммиты.

Версия 1.5.2

27 сентября 2023 г.

androidx.compose.runtime:runtime-*:1.5.2 выпущен. Версия 1.5.2 содержит эти коммиты.

Версия 1.5.1

6 сентября 2023 г.

androidx.compose.runtime:runtime-*:1.5.1 выпускается. Версия 1.5.1 содержит эти коммиты.

Версия 1.5.0

9 августа 2023 г.

androidx.compose.runtime:runtime-*:1.5.0 выпущен. Версия 1.5.0 содержит эти коммиты.

Изменения API

  • Удаленные ассигнования по переработке, цветовой анимации и AndroidComposeView . ( IB2BFA )
  • Добавлена аннотация @StateFactoryMarker , чтобы отметить функции, которые создают состояния, и должны быть обернуты в вызов remember . ( I64550 )
  • Добавить примитивные версии состояния и MutableState ( FB3D89 )
  • Добавлен Snapshot.isApplyObserverNotificationPending ( i672a5 )
  • Добавлены примитивные версии State API, позволяющие int, long, float и двойные значения отслеживать в объектах State без штрафов за автобоксинг. Используйте новые заводские методы mutableIntState(Int) , mutableFloatStateOf(Float) и т. Д., Чтобы использовать их. ( I48e43 )

Исправления ошибок

  • Пропустить переоборудование подкомпозиций, которые будут удалены. ( IEEB99 , B/254645321 )
  • Не сохраняйте ссылку на снимок в ComposerImpl ( 0206F7 )
  • Не применяйте композицию дважды ( F5791B )
  • Обеспечить недействительную значения не инициализированных полученных состояний ( AA2A92 )
  • Позвоните в onEndChanges во время композиции. ( 62CC8C )
  • Исправить перемещение контента в субкомпозицию ( 4beb41 )
  • Исправить потенциальные тупики ( C1A425 и 8EDCE0 )
  • Recomposer, созданный для окна Andide, теперь будет блокировать вызовы withFrameNanos вместо всей композиции, когда он получает уведомление ON_STOP. Это означает, что Windows, связанные с остановленными активиями, будут продолжать переоценивать для изменений данных, но анимации или любой другой вызывающий абонент withFrameNanos будут блокировать. ( Id9e7f , b/2409755572 )
  • Выполнить деактивационные обратные вызовы для LayoutNode перед утилизацией эффектов 3784073
  • Исправлена измененные флаги для перезапущенного лямбдас EA81DF9
  • Исправлена регрессия в прямом эфире для композиции с узлами 73FD4D8
  • On_stop должен приостановить трансляции кадров .
  • Несилировать SnapshotStateObserver Scopes для неизменных производных состояний 84D9B1C
  • Исправьте потенциал мертвого замка при утилизации композиций 28761FC
  • Исправьте перемещение контента в подкомпозицию 92D4156
  • Исправлена измененные флаги для перезапущенных лямбдас ( 8A03E9 )
  • Выполнить дезактивационные обратные вызовы для LayoutNode перед утилизацией эффектов ( 8B0FA4 )
  • Исправьте endToMarker() при окончании групп узлов. ( D71D980 )
  • Используйте текущую группу SlotWriter для проверки деактивации ( A0B518B )
  • Снимите fill в SlotTable.moveSlotGapTo() и переместите его в закрытие ( 81F9935 )
  • Исправить отсутствие недействительных, пока движется подвижный контент ( 1D7C024 )
  • Исправьте немедленные признания за перемещенное подвижное содержание ( 8676618 )

Улучшения производительности

  • Избегайте рассчитывания readableHash в DerivedState , если снимок не был изменен. ( 307102 )
  • Снижение распределения ( I65C09 , D7EA77 , 727974 и 445808 )
  • Быстрая отмена Compose 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 )

  • Доступна дополнительная проверка, чтобы рекомендовать Migrating mutableStateOf() вызовы в соответствующие специализированные типы для примитивов. Его идентификатор пронзака - AutoboxingStateCreation . Ранее эта проверка была включена по умолчанию для всех проектов. Чтобы увидеть это предупреждение в редакторе Android Studio и выходе из вашего проекта, измените его серьезность от информационного к предупреждению (или выше), объявив warning "AutoboxingStateCreation" внутри Build.Gradle или Build.Gradle.KTS, как показано ( i34F7E ):

        android {
            lint {
                warning "AutoboxingStateCreation"
            }
            ...
        }
    

Версия 1.5.0-beta03

28 июня 2023 г.

androidx.compose.runtime:runtime-*:1.5.0-beta03 выпускается. Версия 1.5.0-бета03 содержит эти коммиты.

Исправления ошибок

  • Пропустить переоборудование подкомпозиций, которые будут удалены. ( IEEB99 , B/254645321 )

Версия 1.5.0-beta02

7 июня 2023 г.

androidx.compose.runtime:runtime-*:1.5.0-beta02 выпускается. Версия 1.5.0-бета02 содержит эти коммиты.

Улучшения производительности

  • Избегайте рассчитывания readableHash в DerivedState , если снимок не был изменен. ( 307102 )

Версия 1.5.0-beta01

24 мая 2023 г.

androidx.compose.runtime:runtime-*:1.5.0-beta01 выпускается. Версия 1.5.0-бета01 содержит эти коммиты.

Изменения API

  • Удаленные ассигнования по переработке, цветной анимации и AndroidComposeView ( IB2BFA )
  • Добавлена аннотация @StateFactoryMarker , чтобы отметить функции, которые создают состояния, и должны быть обернуты в вызов remember . ( I64550 )
  • Добавить примитивные версии состояния и MutableState ( FB3D89 )
  • Добавлен Snapshot.isApplyObserverNotificationPending ( i672a5 )

Исправления ошибок

  • Снижение распределения ( I65C09 , D7EA77 , 727974 и 445808 )
  • Не сохраняйте ссылку на снимок в ComposerImpl ( 0206F7 )
  • Быстрая отмена Compose CoroutineScopes ( A55362 и BD382F )
  • Не применяйте композицию дважды ( F5791B )
  • Обеспечить недействительную значения не инициализированных полученных состояний ( AA2A92 )
  • Позвоните в onEndChanges во время композиции. ( 62CC8C )
  • Исправить перемещение контента в субкомпозицию ( 4beb41 )
  • Исправить потенциальные тупики ( C1A425
  • On_stop должен приостановить трансляции кадров .
  • Исправлена измененные флаги для перезапущенных лямбдас ( 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 и двойные значения отслеживать в объектах 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

  • Recomposer, созданный для окна Andide, теперь будет блокировать вызовы withFrameNanos вместо всей композиции, когда он получает уведомление ON_STOP. Это означает, что Windows, связанные с остановленными активиями, будут продолжать переоценивать для изменений данных, но анимации или любой другой вызывающий абонент withFrameNanos будут блокировать. ( Id9e7f , b/2409755572 )

Исправления ошибок

  • Исправить потенциальный тупик в списке снимков и карта 5C1A425
  • Выполнить деактивационные обратные вызовы для LayoutNode перед утилизацией эффектов 3784073
  • Исправлена измененные флаги для перезапущенного лямбдас EA81DF9
  • Исправлена регрессия в прямом эфире для композиции с узлами 73FD4D8
  • On_stop должен приостановить трансляции кадров .
  • Несилировать SnapshotStateObserver Scopes для неизменных производных состояний 84D9B1C
  • Исправьте потенциал мертвого замка при утилизации композиций 28761FC
  • Исправьте перемещение контента в подкомпозицию 92D4156

Версия 1.5.0-альфа02

5 апреля 2023 г.

androidx.compose.runtime:runtime-*:1.5.0-alpha02 выпускается. Версия 1.5.0-Alpha02 содержит эти коммиты.

Новые функции

  • Оператор getValue Kotlin теперь может быть композицией ( F174F6E )

Исправления ошибок, улучшения производительности

  • Перезаписать записи о государственных объектах с недоступными государственными записями ( C986960 )
  • Используйте композитор правильной области при реализации групп ( 9A5E5B6 )
  • Исправьте endToMarker() при окончании групп узлов. ( D71D980 )
  • Используйте текущую группу SlotWriter для проверки деактивации ( A0B518B )
  • Используйте IdentityArraySet для хранения недействительных снимков ( 7F60CCA )
  • Снимите fill в SlotTable.moveSlotGapTo() и переместите его в закрытие ( 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 для запуска Coroutines ( i76ef9 )
  • Разрешить Modifier.Nodes CompositionLocalConsumerModifierNode ( IB44DF CompositionLocals

Версия 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
  • Добавить группы, необходимые в организме Unskippable Lambdas 7D06752
  • Улучшение эталонных характеристик памяти состояния снимка 93FCAE8
  • Удалить бокс в композиции локальный поиск 0875717
  • Используйте правильный ключ для незаконных узлов групп 6388D8D
  • Защитите SnapshotStateObserver от рекурсивного и одновременного применения 98CB6BA
  • Добавлена проверка IdentityArraySet индекс .
  • Обновление модуля Compose для использования ViewTreeLifecycleOwner расширения 21C2122
  • Отправить применить уведомления после повторного заканчиваемого кадра. 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-бета02 содержит эти коммиты.

Версия 1.4.0-бета01

8 февраля 2023 г.

androidx.compose.runtime:runtime-*:1.4.0-beta01 выпускается. Версия 1.4.0-бета01 содержит эти коммиты.

Изменения API

  • Был добавлен ComposeNodeLifecycleCallback , который позволяет наблюдать жизненный цикл композитных узлов ( i3731b )
  • Добавлено @TestOnly в Composer.disableSourceInformation() , так как эта функция безопасна только для вызова в тесте. ( I896c8 )

Исправления ошибок

  • Удалить бокс в композиции локальные поиски ( 62F66A )
  • Улучшение эталонных характеристик памяти состояния снимка ( DFB451 )

Версия 1.4.0-Alpha05

25 января 2023 г.

androidx.compose.runtime:runtime:1.4.0-alpha05 и androidx.compose.runtime:runtime-saveable:1.4.0-alpha05 выпускаются. Версия 1.4.0-Alpha05 содержит эти коммиты.

Изменения API

  • Больше типа/нуляции встроенных/устаревших функций ( I24F91 )

Версия 1.4.0-Alpha04

11 января 2023 г.

androidx.compose.runtime:runtime-*:1.4.0-alpha04 выпускается. Версия 1.4.0-Alpha04 содержит эти коммиты.

Изменения API

  • TestMonotonicFrameClock теперь использует правильную экспериментальную аннотацию. ( I95c9e )

Исправления ошибок

  • Защитите SnapshotStateObserver от рекурсивного и одновременного применения ( D902FB )

Версия 1.4.0-Alpha03

7 декабря 2022 г.

androidx.compose.runtime:runtime-*:1.4.0-alpha03 выпускается. Версия 1.4.0-Alpha03 содержит эти коммиты.

Изменения API

  • Добавление нового публичного метода в ComposableMethod класса, аналогичный java.lang.reflect.Method#getParameterTypes() ( iab0c3 )

Исправления ошибок

  • Уведомления о применении снимка теперь отправляются после того, как Recomposer заканчивает применение изменений. ( IAD6C0 , B/222093277 )

Версия 1.4.0-Alpha02

9 ноября 2022 г.

androidx.compose.runtime:runtime-*:1.4.0-alpha02 выпускается. Версия 1.4.0-Alpha02 содержит эти коммиты.

Версия 1.4.0-альфа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

Исправления времени выполнения

Система снимков

Версия 1.3.0-rc01

5 октября 2022 г.

androidx.compose.runtime:runtime-*:1.3.0-rc01 выпускается. Версия 1.3.0-RC01 содержит эти коммиты.

Исправления ошибок

  • Фиксированный ArrayIndexOutOfBoundsException , поступающий из таблицы слотов ( B/249076084 )

Версия 1.3.0-бета03

21 сентября 2022 г.

androidx.compose.runtime:runtime-*:1.3.0-beta03 выпускается. Версия 1.3.0-бета03 содержит эти коммиты.

Поведение нарушение изменения

  • Параметр, чтобы remember и rememberCoroutineScope , где изменяется, чтобы быть crossinline . Это сообщит об ошибке для раннего возврата вместо того, чтобы позволить ранний возврат, который приведет к сообщению о более поздней внутренней ошибке.
  • Это изменение может потенциально привести к появлению новых ошибок компилятора, требующих удаления нелокальных доходов из Lambdas, переданных в эти функции. ( Ibea62 )

Версия 1.3.0-бета02

7 сентября 2022 г.

androidx.compose.runtime:runtime-*:1.3.0-beta02 выпускается. Версия 1.3.0-бета02 содержит эти коммиты.

Исправления ошибок

  • Обновлен API ( i64CA0 )

Версия 1.3.0-beta01

24 августа 2022 г.

androidx.compose.runtime:runtime-*:1.3.0-beta01 выпускается. Версия 1.3.0-бета01 содержит эти коммиты.

Изменения API

  • Метод find был добавлен в CompositionData , чтобы позволить инструментам разработчика с использованием этого API быстро найти подгруппу композиции, используя ее идентичность. ( I5794f )

Версия 1.3.0-Alpha03

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 , которое можно использовать для включения сложных UX, таких как переходы общих элементов. API movableContentOf преобразует композиционную лямбду в лямбду, которая перемещает его состояние и соответствующие узлы в любое новое местоположение, которое она называется. Когда предыдущий вызов покидает композицию, состояние временно сохраняется, и если новый вызов Lambda входит в композицию, то штат и связанные узлы перемещаются в место нового вызова. Если новый вызов не добавляется, состояние удаляется навсегда, и помните, что наблюдатели уведомляются.

  • Если в одной и той же композиции movableContentOf называется многократным, новое состояние и узлы создаются для каждого вызова, и, поскольку вызовы оставляют композицию и новые вызовы вводится, состояние перемещается из первых вызовов к вступающим вызовам в порядке, которые они вызываются. Все государство не заявлено новыми вызовами, удаляется навсегда.

  • В дополнение к этому и нескольким другим новым функциям было потрачено много времени, стабилизируя систему выполнения и состояния моментальных снимков. Различные утечки памяти были удалены и оптимизировали пути кода.

  • Суммированный список изменений можно найти ниже:

Новые функции в 1.2

Производительность в 1.2

Исправления ошибок в 1.2

Версия 1.2.0-RC03

29 июня 2022 г.

androidx.compose.runtime:runtime-*:1.2.0-rc03 выпускается. Версия 1.2.0-RC03 содержит эти коммиты.

Исправления ошибок

  • Полученные наблюдения состояния ранее были безусловно удалены из рекомплексного масштаба и композиции вместе, которые нарушали другие области, которые все еще могут наблюдать за производным состоянием. Это изменение удаляет полученные экземпляры состояния только в том случае, если оно больше не наблюдается другими областями. ( B/236618362 )

Версия 1.2.0-RC02

22 июня 2022 г.

androidx.compose.runtime:runtime-*:1.2.0-rc02 выпускается. Версия 1.2.0-RC02 содержит эти коммиты.

Версия 1.2.0-RC01

15 июня 2022 г.

androidx.compose.runtime:runtime-*:1.2.0-rc01 выпускается. Версия 1.2.0-RC01 содержит эти коммиты.

Изменения API

  • Интерфейсы в библиотеках Compose теперь созданы с использованием методов интерфейса JDK8 по умолчанию ( I5BCF1 )

Версия 1.2.0-бета03

1 июня 2022 г.

androidx.compose.runtime:runtime-*:1.2.0-beta03 выпускается. Версия 1.2.0-бета03 содержит эти коммиты.

Версия 1.2.0-beta02

18 мая 2022 г.

androidx.compose.runtime:runtime-*:1.2.0-beta02 выпускается. Версия 1.2.0-бета02 содержит эти коммиты.

Версия 1.2.0-beta01

11 мая 2022 г.

androidx.compose.runtime:runtime-*:1.2.0-beta01 выпускается. Версия 1.2.0-бета01 содержит эти коммиты.

Новые функции

  • Это первая бета -версия 1.2!

Изменения API

  • Добавлен экспериментальный Snapshot.unsafeEnter/unsafeLeave ( i108f3 )
  • Добавлен экспериментальный Snapshot.asContextElement() .
  • Аннотация и аннотации @ComposableTarget и аннотации, помеченные @ComposableTargetMarker теперь могут использоваться в прицеле файла с помощью префикса @file . Использование целевой аннотации в прицеле файла приведет к тому, что компилятор предполагает, что все композиционные функции в файле предназначены для того, чтобы быть нацеленным на связанный приложение. Например, использование @file:UiComposable заявляет, что все функции @Composable нацелены на Compose UI Applier. Функция, которая должна ориентироваться на другого приложения, должна явно предоставить аннотацию целевого маркера для желаемого приложения. ( I40804 )

Версия 1.2.0-Alpha08

20 апреля 2022 г.

androidx.compose.runtime:runtime-*:1.2.0-alpha08 выпускается. Версия 1.2.0-Alpha08 содержит эти коммиты.

Изменения API

  • Добавлено TracingInProgress к интерфейсу CompositionTracer . ( IC6F12 )
  • Добавить recomposeScopeIdentity в композитор ( I0C873 )
  • Ограниченное отслеживание API (Composer.SetTracer) для OptIn(InternalComposeTracingApi) . ( I9187f )
  • Добавлен ResuableContentHost , который позволяет лучше контролировать государственное время жизни, созданное для многократного использования контента. Например, если субкомпозиция временно не используется, то содержание может быть деактивировано, что приводит к тому, что все запоминающиеся состояния в композиции будет забыт, например, все одноразовые эффекты. ( I2c0f2 , b/220322704 )

Версия 1.2.0-Alpha07

6 апреля 2022 г.

androidx.compose.runtime:runtime-*:1.2.0-alpha07 выпускается. Версия 1.2.0-Alpha07 содержит эти коммиты.

Изменения API

  • Новая функция Snapshot.withoutReadObservation { ... } был добавлен. Это позволяет пользователям запускать пропущенную Lambda, не подписываясь на изменения значений состояния, прочитанных в этом блоке. Вы можете найти его полезным в использовании, когда вы хотите извлечь выгоду из поток на основе снимка безопасной записи/чтения, но хотите иметь возможность читать значение, не вызывая ненужного переоборудования или переработки. ( I9f365 , b/214054486 )

Версия 1.2.0-Alpha06

23 марта 2022 г.

androidx.compose.runtime:runtime-*:1.2.0-alpha06 выпускается. Версия 1.2.0-Alpha06 содержит эти коммиты.

Версия 1.2.0-Alpha05

9 марта 2022 г.

androidx.compose.runtime:runtime-*:1.2.0-alpha05 выпускается. Версия 1.2.0-Alpha05 содержит эти коммиты.

Внешний вклад

  • Обновлено для использования Cotlinx Coroutines 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 для функции и любые типы параметров композиции Lambda. Однако рекомендуется создать аннотацию, которая аннотирована с помощью 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 , который преобразует композиционную лямбду в лямбду, которая перемещает его состояние и соответствующие узлы, в любое новое местоположение, которое она называется. Когда предыдущий вызов покидает композицию, состояние временно сохраняется, и если новый вызов Lambda входит в композицию, то штат и связанные узлы перемещаются в место нового вызова. Если новый вызов не добавляется, состояние удаляется навсегда, и помните, что наблюдатели уведомляются.

    Если в одной и той же композиции movableContentOf называется многократным, новое состояние и узлы создаются для каждого вызова, и, поскольку вызовы оставляют композицию и новые вызовы вводится, состояние перемещается из первых вызовов к вступающим вызовам в порядке, которые они вызываются. Все государство не заявлено новыми вызовами, удаляется навсегда. ( IB4850 )

  • Добавлено отслеживание API в композицию, чтобы дать инструменты для обеспечения более подробной отслеживания композиционных функций. Компилятор теперь генерирует вызовы в API отслеживания, которые включают информацию источника. ( IB0EB5 )

    Чтобы удалить эти вызовы и связанную информацию источника из сборки выпуска, добавьте следующее правило прогноза:

      -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

  • Добавлен поле identity в CompositionData для генерации инвариантных идентификаторов в инспекторе макета. ( IC116E )

Обновления зависимости

  • Теперь зависит от Kotlin 1.6.10 .

Версия 1.1

Версия 1.1.1

23 февраля 2022 г.

androidx.compose.runtime:runtime-*:1.1.1 выпускается. Версия 1.1.1 содержит эти коммиты.

Исправления ошибок

  • Исправить NullPointerException на androidx.compose.ui.platform.RenderNodeLayer.updateDisplayList ( AOSP/1947059 , b/206677462 )
  • Исправьте сбой, вызванный контентом буфера обмена во время чтения из буфера обмена на Android. ( I06020 , B/197769306 )
  • Фиксированный 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
  • Улучшения по поводу достижения целевого размера
  • Обратите внимание, что в отношении сочинения 1.0 компоненты материала будут расширять место для макета, чтобы соответствовать рекомендациям доступности материала для прикосновения целевого размера . Например, Target Button Touch будет расширяться до минимального размера 48x48dp , даже если вы установите размер кнопки меньше. Это выравнивает материал с тем же поведением компонентов дизайна материала, обеспечивая постоянное поведение, если вы смешиваете виды и сочиняете. Это изменение также гарантирует, что при создании вашего пользовательского интерфейса используется компоненты Compose Material, будут выполнены минимальные требования к доступающей целевой доступности.
  • Стабильная поддержка навигационной железной дороги
  • Выпускники ряда ранее экспериментальных API до стабильных
  • Поддержка новых версий Kotlin

Версия 1.1.0-rc03

26 января 2022 г.

androidx.compose.runtime:runtime-*:1.1.0-rc03 выпускается. Версия 1.1.0-RC03 содержит эти коммиты.

Исправления ошибок

  • Обновлено для поддержки Compose Material 1.1.0-rc03

Версия 1.1.0-rc01

15 декабря 2021 г.

androidx.compose.runtime:runtime-*:1.1.0-rc01 выпускается. Версия 1.1.0-RC01 содержит эти коммиты.

Версия 1.1.0-бета04

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-бета02

3 ноября 2021 г.

androidx.compose.runtime:runtime-*:1.1.0-beta02 выпускается. Версия 1.1.0-beta02 содержит эти коммиты.

Изменения API

  • Код снимка был разделен на несколько файлов, но все еще живет в одном и том же классе JVM. ( IC6C98 )

Версия 1.1.0-beta01

27 октября 2021 г.

androidx.compose.runtime:runtime-*:1.1.0-beta01 выпускается. Версия 1.1.0-beta01 содержит эти коммиты.

Версия 1.1.0-Alpha06

13 октября 2021 г.

androidx.compose.runtime:runtime-*:1.1.0-alpha06 выпускается. Версия 1.1.0-Alpha06 содержит эти коммиты.

Изменения API

  • Удален InternalCompilerApi из методов композитора, которые необходимо назвать кросс-модулем ( 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 той же версии или позже. После этого изменения компилятор Compose совместим с более старой версией времени выполнения Compose (1.0). ( AOSP/1796968 )
  • Обновленная композа 1.1.0-alpha03 , чтобы зависеть от Kotlin 1.5.30 . ( I74545 )

Версия 1.1.0-альфа02

18 августа 2021 г.

androidx.compose.runtime:runtime-*:1.1.0-alpha02 выпускается. Версия 1.1.0-Alpha02 содержит эти коммиты.

Версия 1.1.0-альфа01

4 августа 2021 г.

androidx.compose.runtime:runtime-*:1.1.0-alpha01 выпускается. Версия 1.1.0-Alpha01 содержит эти коммиты.

Версия 1.0

Версия 1.0.5

3 ноября 2021 г.

androidx.compose.runtime:runtime-*:1.0.5 выпущен. Версия 1.0.5 содержит эти коммиты.

Исправления ошибок

  • Исправлена экземпляры отслеживания аварии. ( AOSP/1792247 )

Версия 1.0.4

13 октября 2021 г.

androidx.compose.runtime:runtime-*:1.0.4 выпущен. Версия 1.0.4 содержит эти коммиты.

Обновления зависимости

  • Обновлено, чтобы зависеть от Kotlin 1.5.31

Версия 1.0.3

29 сентября 2021 г.

androidx.compose.runtime:runtime-*:1.0.3 выпускается. Версия 1.0.3 содержит эти коммиты.

Обновления зависимости

  • Обновлено, чтобы зависеть от Kotlin 1.5.30

Версия 1.0.2

1 сентября 2021 г.

androidx.compose.runtime:runtime-*:1.0.2 выпускается. Версия 1.0.2 содержит эти коммиты.

Обновлено, чтобы поддержать выпуск Compose 1.0.2 . Compose 1.0.2 по -прежнему совместим с Kotlin 1.5.21 .

Версия 1.0.1

4 августа 2021 г.

androidx.compose.runtime:runtime-*:1.0.1 выпущен. Версия 1.0.1 содержит эти коммиты.

Обновления зависимости

  • Обновлено, чтобы зависеть от Kotlin 1.5.21 .

Версия 1.0.0

28 июля 2021 г.

androidx.compose.runtime:runtime-*:1.0.0 выпускается. Версия 1.0.0 содержит эти коммиты.

Основные особенности 1.0.0

Это первый стабильный выпуск Compose. Пожалуйста, смотрите официальный блог Compose Release для получения более подробной информации!

Известные проблемы

  • Если вы используете Android Studio Bumblebee Canary 4 или AGP 7.1.0-alpha04 / 7.1.0-alpha05 , вы можете нанести следующий сбой:

      java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"
    

    Чтобы исправить, временно увеличивайте свой minsdkversion до 24+ в вашем файле build.gradle . Эта проблема будет исправлена в следующей версии Android Studio Bumblebee и AGP 7.1 . ( б/194289155 )

Версия 1.0.0-RC02

14 июля 2021 г.

androidx.compose.runtime:runtime-*:1.0.0-rc02 выпускается. Версия 1.0.0-RC02 содержит эти коммиты.

  • Фиксированные условия гонки в SnapshotStateObserver, вызывая Spurratic NullPointerExceptions. ( AOSP/1763445 , AOSP/1758105 , B/192677711 )
  • Фиксированные проблемы со снимками времени выполнения, вызывающие java.lang.IllegalStateException: Reading a state that was created after the snapshot was taken or in a snapshot that has not yet been applied . ( B/193006595 , B/192570897 )

Версия 1.0.0-rc01

1 июля 2021 г.

androidx.compose.runtime:runtime-*:1.0.0-rc01 выпускается. Версия 1.0.0-RC01 содержит эти коммиты.

Версия 1.0.0-бета09

16 июня 2021 г.

androidx.compose.runtime:runtime-*:1.0.0-beta09 выпускается. Версия 1.0.0-BETA09 содержит эти коммиты.

Добавлены правила профиля

Этот релиз добавляет правила профиля к следующим модулям Compose ( i14ed6 ):

  • androidx.compose.animation
  • Androidx.compect.animation-Core
  • Androidx.compose.foundation
  • Androidx.compose.foundation-layout
  • androidx.compose.material
  • Androidx.compes.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 или эквивалент. Файл указывает правило на строку, где правило в этом случае является шаблоном для сопоставления методов или классов в библиотеке. Синтаксис для этих правил является суперсетом формата профиля искусства, читаемого на человеку, который используется при использовании adb shell profman --dump-classes-and-methods ... Эти правила принимают одну из двух форм для нацеливания на методы или классы.

  • Правило метода будет иметь следующую шаблон:

    <FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
    
  • И правило класса будет иметь следующий шаблон:

    <CLASS_DESCRIPTOR>
    
  • Здесь <FLAGS> это один или несколько символов H , S и P , чтобы указать, следует ли пометить этот метод как «горячий», «стартап» или «Post Startup».

  • <CLASS_DESCRIPTOR> является дескриптором для класса, которому принадлежит целевой метод. Например, класс androidx.compose.runtime.SlotTable будет иметь дескриптор Landroidx/compose/runtime/SlotTable; Полем

  • <METHOD_SIGNATURE> является подписью метода и включает имя, типы параметров и типы возврата метода. Например, метод fun isPlaced(): Boolean на LayoutNode имеет подпись isPlaced()Z .

  • Эти шаблоны могут иметь подстановочные знаки ( ** , * и ? ), Чтобы иметь единое правило, охватывать несколько методов или классов.

Что делают правила?

  • Метод, который имеет флаг H указывает, что этот метод является «горячим» методом и должен быть скомпилирован заранее.

  • Метод, который имеет флаг S указывает на то, что это метод, который вызывается при запуске, и должен быть скомпилирован заранее, чтобы избежать стоимости компиляции и интерпретации метода во время запуска.

  • Метод, который имеет флаг P указывает, что это метод, который называется после запуска.

  • Класс, который присутствует в этом файле, указывает на то, что он используется во время запуска и должен быть предварительно выделен в куче, чтобы избежать стоимости загрузки класса.

Как это работает?

  • Библиотеки могут определить эти правила, которые будут упакованы в артефакты AAR. Когда приложение затем строится, которое включает эти артефакты, эти правила объединяются вместе, и объединенные правила используются для создания компактного бинарного профиля искусства, характерного для приложения. Искусство может затем использовать этот профиль, когда приложение установлено на устройствах, чтобы заранее собрать конкретное подмножество приложения для повышения производительности приложения, особенно первого запуска. Обратите внимание, что это не повлияет на отказываемые приложения.

Версия 1.0.0-бета08

2 июня 2021 г.

androidx.compose.runtime:runtime-*:1.0.0-beta08 выпускается. Версия 1.0.0-BETA08 содержит эти коммиты.

Изменения API

  • State<T> теперь State<out T> ( i69049 )
  • ControlledComposition API изменение, чтобы позволить переоборудовать изменения в однокомпонентном отдельном проходе. ( IAAFD1 , B/184173932 )

Версия 1.0.0-бета07

18 мая 2021 г.

androidx.compose.runtime:runtime-*:1.0.0-beta07 выпускается. Версия 1.0.0-BETA07 содержит эти коммиты.

Изменения API

  • Добавлены новые API компилятора, которые позволяют удалить информацию, сгенерированную компилятором, во время минификации источника. ( IA34E6 )
  • Представляет ReusableContent , который попытается повторно использовать узлы в его содержании вместо того, чтобы заменить их при изменении ключа. Когда ключ изменяется, предыдущие значения в таблице слотов для содержания игнорируются, за исключением сгенерированных узлов, и значения, используемые для обновления узлов.

    Представляет ReusableComposeNode , который повторно использует испускаемый узел вместо его замены, как это сделано для ComposeNode . ( I1dd86 )

  • @ComposeCompilerApi больше не @RequiresOptIn ( IAB690 )

Исправления ошибок

  • Lazycolumn/Row теперь будет продолжать работать до 2 ранее видимых предметов (не утилизируется), даже если они уже прокручиваются. Это позволяет компоненту повторно использовать активные подкомпозиции, когда нам нужно будет составить новый элемент, который улучшает производительность прокрутки. ( IE5555 )

Версия 1.0.0-бета06

5 мая 2021 г.

androidx.compose.runtime:runtime-*:1.0.0-beta06 выпускается. Версия 1.0.0-BETA06 содержит эти коммиты.

Изменения API

  • @ComposeCompilerApi больше не @RequiresOptIn ( IAB690 )

Версия 1.0.0-бета05

21 апреля 2021 г.

androidx.compose.runtime:runtime-*:1.0.0-beta05 выпускается. Версия 1.0.0-BETA05 содержит эти коммиты.

Изменения API

  • Удален @InternalComposeApi для записи снимков и записи снимка ( ID134D )

Исправления ошибок

  • Файлы AndroidManifest из UI-test-Manifest и UI-Tooling-Data в настоящее время совместимы с Android 12 ( i6f9de , b/184718994 )

Версия 1.0.0-beta04

7 апреля 2021 г.

androidx.compose.runtime:runtime-*:1.0.0-beta04 выпускается. Версия 1.0.0-BETA04 содержит эти коммиты.

Исправления ошибок

  • Перед этим изменением локальные композиционные функции были пропускаются на основе их параметров. После этого изменения никакие локальные композиционные функции не пропускают. Это изменение осуществляется, потому что оно является обычным и ожидается, что локальные функции снимают параметры от родителя, а их пропуск является общим источником ошибок.

    Подводя итог, рассмотрите пример:

    @Composable fun Counter(count: Int, onCountChange: (Int) -> Unit) {
      @Composable fun ShowCount() { Text("Count: $count") }
      ShowCount()
      Button(onClick={ onCountChange(count + 1) }) {
        Text("Increment")
      }
    }
    

    До этого изменения функция композиции ShowCount всегда будет пропускать, даже после обновления параметра count . Это больше не так. ( I5648a )

  • Исправлена проблема, когда rememberSaveable() восстанавливал старое значение при использовании с входными параметрами ( I1B110 , B/182403380 )

Версия 1.0.0-beta03

24 марта 2021 г.

androidx.compose.runtime:runtime-*:1.0.0-beta03 выпускается. Версия 1.0.0-BETA03 содержит эти коммиты.

Изменения API

  • DefaultMonotonicFrameClock устарел. Призыв withFrameNanos или Recomposer.runRecomposeAndApplyChanges без MonotonicFrameClock теперь будет выбросить IllegalStateException . ( I4eb0d )

Версия 1.0.0-beta02

10 марта 2021 г.

androidx.compose.runtime:runtime-*:1.0.0-beta02 выпущен. Версия 1.0.0-BETA02 содержит эти коммиты.

Исправления ошибок

  • Применение ограничений на публичное использование экспериментальных API ( i6aa29 , b/174531520 )
  • Исправлено для разбитых rememberSaveable { mutableStateOf(0) } при использовании в пункте назначения навигационного состава. ( I1312b , b/180042685 , b/180701630 )

Версия 1.0.0-beta01

24 февраля 2021 г.

androidx.compose.runtime:runtime-*:1.0.0-beta01 is released. Version 1.0.0-beta01 contains these commits.

This is the first release of Compose 1.0.0 Beta.

Изменения 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 for compositionLocalOf and staticCompositionLocalOf 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 after selected and onClick .
    • Renamed alwaysShowLabels parameter in BottomNavigationItem to alwaysShowLabel .
    • Renamed bodyContent parameters in a few components to just content .
    • 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 to darkColors() . This color is typically the same as secondary 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 in Slider to onValueChangeFinished and made it nullable.
    • Renamed text parameter in Snackbar to content for consistency.
    • Added contentPadding parameter to DropdownMenuItem to allow customizing the default padding and made content be an extension on RowScope .
    • Renamed ModalDrawerLayout to ModalDrawer .
    • Renamed BottomDrawerLayout to BottomDrawer .
    • ( I1cc66 )

Version 1.0.0-alpha12

10 февраля 2021 г.

androidx.compose.runtime:runtime-*:1.0.0-alpha12 is released. Version 1.0.0-alpha12 contains these commits.

Изменения 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 and withMutableSnapshot 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 for CompositionLifecycleObserver 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 composition onRemembered is called for each reference where onEnter is only called once. onEnter was called multiple time if the object was used in subcompositions, such as WithConstraints and Scaffold making the single onEnter call guarantee unreliable and it was removed for RememberObserver .

    RememberObserver adds onAbandoned which is called if the RememberObserver instance is returned from the callback passed to remember but was not remembered in the composition state and, therefore, will never have onRemembered 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 of RememberObserver following the single reference recommendation above is tracking an external resource both onForgotten and onAbandoned each indicate that the resource is no longer needed. If the object is tracking work started or resources allocated in onRemembered , onAbandoned can be ignored as it will not be called if onRemembered 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 )

Версия 1.0.0-альфа10

13 января 2021 г.

androidx.compose.runtime:runtime-*:1.0.0-alpha10 is released. Version 1.0.0-alpha10 contains these commits.

Критические изменения

  • 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 )

Версия 1.0.0-альфа09

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 to insertTopDown() .

    A new method, insertBottomUp() , was added.

    An applier either inserts nodes into the tree it is editing using insertTopDown() or insertBottomUp() depending on which performs better.

    Some trees, such as LayoutNode and View , 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 an Applier overrides insertBottomUp() to build a tree bottom-up and insertTopDown() 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 )

Исправления ошибок

Версия 1.0.0-альфа08

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 to content , 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 )

Версия 1.0.0-альфа07

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 to runtime-rxjava2 ( I02cbf )

Версия 1.0.0-альфа06

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 )

Версия 1.0.0-альфа05

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 )

Версия 1.0.0-альфа04

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 )

Версия 1.0.0-альфа03

16 сентября 2020 г.

androidx.compose.runtime:runtime-*:1.0.0-alpha03 is released. Version 1.0.0-alpha03 contains these commits.

Изменения API

  • CompositionCoroutineScope no longer implements MonotonicFrameClock . Callers of withFrameNanos should import the top-level function explicitly. ( Icb642 , b/166778123 )

Исправления ошибок

  • Global testing functions such as onNode or waitForIdle are now deprecated, please migrate to their new counterparts that are defined on ComposeTestRule ( I7f45a )
  • launchInComposition no longer launches coroutines undispatched ( Ief6af , b/166486000 )

Версия 1.0.0-альфа02

2 сентября 2020 г.

androidx.compose.runtime:runtime-*:1.0.0-alpha02 is released. Version 1.0.0-alpha02 contains these commits.

Изменения API

  • Add snapshotFlow and withMutableSnapshot 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 )

Версия 1.0.0-альфа01

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 to remember { mutableStateOf(...) } for clarity. This reduces the overall API surface and number of concepts for state management, and matches the by 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. Use AndroidView 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() and savedInstanceStateOf() has changed to be structuralEqualityPolicy() instead of referentialEqualityPolicy() .

    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() and savedInstanceStateOf() use mutableStateOf() in their implementations so they were changed to be consistent with mutableStateOf() .

    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 of state 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 as data classes, might see a performance degradation as their equals() methods are now, by default, called when assigned to a mutableStateOf() .

    The previous behavior can be restored by adding the policy parameter policy = referentialEqualityPolicy() to calls to mutableStateOf() , ambientOf() and savedInstanceStateOf() . ( Ic21a7 )

  • Row and Column 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”

    Заметки о миграции

    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 into val properties of a data class, and then use state instead of remember , and assign the state value to cloned copies of the original using the data class copy(...) 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 all var properties of the original class with var properties with mutableStateOf 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:

    1. Some calls will skip where they wouldn't have previously
    2. 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 the vararg version going forward. 5. The Pivotal annotation was deprecated. Use key 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 and StableMutableMap 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 and SnapshotStateMap are now public but they will be deprecated once StableMutableList and StableMutableMap 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 { ... } or by 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 or setViewContent instead. Compose.disposeComposition has been deprecated. Use the dispose method on the Composition returned by setContent 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 be true , 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 to runOnIdle ( 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 and runOnUiThread 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. Use StateFlow<T> or pass an explicit initial value instead. ( I63f98 , b/157674865 )