Создание среды выполнения

Фундаментальные строительные блоки модели программирования Compose и управления состоянием, а также основная среда выполнения для целевого подключаемого модуля Compose Compiler.
Последнее обновление Стабильный выпуск Релиз-кандидат Бета-версия Альфа-релиз
7 августа 2024 г. 1.6.8 - 1.7.0-бета07 -

Состав

Compose — это комбинация 7 идентификаторов групп Maven в androidx . Каждая группа содержит целевой подмножество функций, каждая из которых имеет свой собственный набор примечаний к выпуску.

В этой таблице описаны группы и ссылки на каждый набор примечаний к выпуску.

Группа Описание
сочинить.анимацию Создавайте анимацию в своих приложениях Jetpack Compose, чтобы улучшить взаимодействие с пользователем.
compose.compiler Преобразуйте функции @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 Compiler.
Compose.ui Фундаментальные компоненты пользовательского интерфейса, необходимые для взаимодействия с устройством, включая макет, рисование и ввод.

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

Чтобы добавить зависимость от Compose, вам необходимо добавить в свой проект репозиторий Google Maven. Для получения дополнительной информации прочтите репозиторий Google Maven .

Добавьте зависимости для нужных вам артефактов в файл build.gradle для вашего приложения или модуля:

классный

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

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.15"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Котлин

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

android {
    buildFeatures {
        compose = true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.15"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Дополнительные сведения о зависимостях см. в разделе Добавление зависимостей сборки .

Обратная связь

Ваши отзывы помогают сделать Jetpack лучше. Дайте нам знать, если вы обнаружите новые проблемы или у вас есть идеи по улучшению этой библиотеки. Пожалуйста, ознакомьтесь с существующими проблемами в этой библиотеке, прежде чем создавать новую. Вы можете добавить свой голос к существующей проблеме, нажав кнопку со звездочкой.

Создать новую задачу

Дополнительную информацию см. в документации по системе отслеживания проблем .

Трассировка времени выполнения, версия 1.0

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

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, обеспечивающая поддержку трассировки композиции при запуске приложения (холодный запуск), например, в 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 , б/282199917 )
  • Предварительные условия для отслеживания при запуске приложения. ( Иад890 )
  • Объединены экспериментальные и общедоступные файлы 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.7

Версия 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-бета05

10 июля 2024 г.

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

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

26 июня 2024 г.

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

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

12 июня 2024 г.

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

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

29 мая 2024 г.

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

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

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 становится более эффективным. В будущем мы планируем включить это по умолчанию. Я ( acbc08 )

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

21 февраля 2024 г.

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

Изменения API

  • Ввести группы замены для улучшения обнаружения изменений ( 0941b5 ).

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

  • Улучшение распределения памяти при обнаружении изменений ( 53e7fd )
  • Исправлена ​​утечка памяти в композиторе ( 0e097d ).
  • Используйте ScopeMap для передачи недействительных данных при перекомпоновке ( e19a7e )
  • Оптимизировать карту недействительности, чтобы сохранять только производные состояния ( f11c44 ).
  • Замените использование IdentityArraySet на ScatterSet ( db572e )
  • Оптимизация removeScope в ScopeMap ( bb0530 )

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

7 февраля 2024 г.

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

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

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

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

  • Измените наблюдатель снимков на месте, когда он уже прозрачен. ( ф60ф30 )
  • Оптимизируйте SnapshotIdSet.lowest() . ( 7ae149 )
  • Используйте fold() без выделения в SnapshotIdSet . ( 532b7d )
  • Удалить выделение итератора ( 83f96b )

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

24 января 2024 г.

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

Оптимизация производительности

  • Добавьте возможность создавать слоты после добавления дочерней группы ( b5960c ).
  • Оптимизация записи изменений состояний моментальных снимков ( 28c3fe )
  • Включить режим сильного пропуска ( ed1766 )

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

  • Учет метаданных параметров по умолчанию во встроенной памяти ( 096665 ).
  • Сделайте currentCompoundHashKey уникальным в большинстве случаев ( d4a872 ).
  • Реализация групп при выходе из вызова встроенной функции ( 2a90fc )

Версия 1.6

Версия 1.6.8

12 июня 2024 г.

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

Версия 1.6.7

1 мая 2024 г.

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

Версия 1.6.6

17 апреля 2024 г.

Выпущен androidx.compose.runtime:runtime-*:1.6.6 . Никаких изменений с момента последнего релиза.

Версия 1.6.5

3 апреля 2024 г.

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

Версия 1.6.4

20 марта 2024 г.

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

Версия 1.6.3

6 марта 2024 г.

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

Версия 1.6.2

21 февраля 2024 г.

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

Версия 1.6.1

7 февраля 2024 г.

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

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

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

Версия 1.6.0

24 января 2024 г.

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

Важные изменения с версии 1.5.0

Новые возможности

  • Повторное создание исключений, которые проглатываются во время цикла рекомпозиции ( 4dff9a ).

Оптимизация производительности

  • Оптимизация записи изменений состояний моментальных снимков ( 28c3fe )
  • Оптимизировать rememberSaveable ( f01d79 )
  • Отложить повторное чтение производных состояний до тех пор, пока не будут записаны изменения ( f38099 ).
  • Улучшение предоставления локальных значений композиции ( a337ea ).

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

  • Исправлена ​​утечка памяти таблицы слотов ( 73fcfe ).
  • Пропустить перекомпозицию подкомпозиций, которые будут удалены. ( Ieeb99 , б / 254645321 )
  • Жизненные циклы RememberObserver запускаются только тогда, когда они сохраняются в расчете запоминания. ( f6b4dc )
  • Ограничьте захват $dirty встроенными лямбда-выражениями. ( acfca0 )
  • Исправлена ​​ошибка, из-за которой перемещаемый контент иногда получал неправильные локальные элементы композиции. ( 035cd6 )

Версия 1.6.0-rc01

10 января 2024 г.

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

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

13 декабря 2023 г.

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

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

29 ноября 2023 г.

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

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

15 ноября 2023 г.

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

Изменения API

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

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

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

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

18 октября 2023 г.

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

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

  • Жизненные циклы RememberObserver запускаются только тогда, когда они сохраняются в вычислении запоминания. ( f6b4dc )
  • Улучшите распределение при сортировке списка недействительности. ( 954d63 )
  • Используйте новые нераспределяющие карты в SnapshotStateObserver . ( 4303ce )
  • Устраните недействительность при деактивации композиции. ( e001be )

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

4 октября 2023 г.

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

Изменения API

  • SnapshotStateList теперь помечен как RandomAccess чтобы можно было использовать версию помощников списка с прямой индексацией. ( I5210c , б / 219554654 )

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

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

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

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

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

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

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

23 августа 2023 г.

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

Новые возможности

  • Повторное создание исключений, которые проглатываются во время цикла рекомпозиции ( 4dff9a ).

Изменения API

  • Добавлен метод деактивации ReusableComposition , удаляющий наблюдения, но сохраняющий узлы на месте. Деактивированную композицию можно активировать снова, вызвав setContent . ( Ib7f31 )
  • Добавьте интерфейс ReusableComposition для управления жизненным циклом и повторного использования подкомпозиций. ( I812d1 , б/252846775 )

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

9 августа 2023 г.

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

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

  • Исправлена ​​новая оптимизация CompositionLocalProvider ( 3118e88 ).
  • Исправьте, как разбираются подвижные узлы контента. ( 5e3d59b )

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

26 июля 2023 г.

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

Новые функции и улучшения производительности

  • Оптимизировать rememberSaveable ( f01d79 )
  • Отложить повторное чтение производных состояний до тех пор, пока не будут записаны изменения ( f38099 ).
  • Улучшение предоставления локальных значений композиции ( a337ea ).
  • SideEffect помечен как @ExplicitGroupsComposable чтобы избежать создания группы. ( I74815 )
  • Избегайте сравнения составов локальных карт при повторном использовании ( 782071 ).

Изменения API

  • Добавлена ​​специальная перегрузка для CompositionLocalProviders , которая позволяет избежать накладных расходов, используемых для ускорения предоставления нескольких значений, но приводит к накладным расходам при предоставлении одного значения. ( I6d640 , б/288169379 )

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

  • Исправлена ​​утечка памяти таблицы слотов ( 73fcfe ).
  • Исправлено то, как мы восстанавливаем rememberSaveable когда stateSaver возвращает значение null ( 90748c ).

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

21 июня 2023 г.

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

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

  • Пропустить рекомпозицию подкомпозиций, которые будут удалены. ( Ieeb99 , б / 254645321 )
  • Уменьшены выделения при применении снимков. ( I65c09 )
  • Избегайте вычисления readableHash в DerivedState , если снимок не был изменен ( 68c565 ).

Версия 1.5

Версия 1.5.4

18 октября 2023 г.

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

Версия 1.5.3

4 октября 2023 г.

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

Версия 1.5.2

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

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

Версия 1.5.1

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

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

Версия 1.5.0

9 августа 2023 г.

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

Изменения API

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

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

  • Пропустить перекомпозицию подкомпозиций, которые будут удалены. ( Ieeb99 , б / 254645321 )
  • Не сохранять ссылку на снимок в ComposerImpl ( 0206f7 ).
  • Не наносите состав дважды ( f5791b )
  • Обеспечить аннулирование неинициализированных значений производного состояния ( aa2a92 ).
  • Вызовите onEndChanges во время удаления композиции. ( 62cc8c )
  • Исправлено перемещение контента в подкомпозицию ( 4beb41 ).
  • Исправить потенциальные взаимоблокировки ( c1a425 и 8edce0 ).
  • Рекомпозер, созданный для окна Android, теперь будет блокировать только вызовы withFrameNanos , а не всю композицию, когда он получает уведомление ON_STOP. Это означает, что окна, связанные с остановленными действиями, будут продолжать перекомпоновываться при изменении данных, но анимация или любой другой вызывающий объект withFrameNanos будет блокироваться. ( Id9e7f , б/240975572 )
  • Выполните обратные вызовы деактивации для LayoutNode перед удалением эффектов 3784073
  • Исправлены измененные флаги для перезапущенных лямбда-выражений ea81df9.
  • Исправлена ​​регрессия живого редактирования для Composable с узлами 73fd4d8.
  • ON_STOP должен приостанавливать передачу кадров вместо композиции ae276f1.
  • Недействительные области SnapshotStateObserver для неизмененных производных состояний 84d9b1c
  • Исправлена ​​возможная тупиковая ситуация при удалении композиций 28761fc.
  • Исправлено перемещение контента в подкомпозицию 92d4156.
  • Исправить измененные флаги для перезапущенных лямбда-выражений ( 8a03e9 ).
  • Выполнить обратные вызовы деактивации для LayoutNode перед удалением эффектов ( 8b0fa4 ).
  • Исправлена endToMarker() при завершении группы узлов. ( d71d980 )
  • Использовать текущую группу SlotWriter для проверки деактивации ( a0b518b )
  • Удалите fill в SlotTable.moveSlotGapTo() и переместите ее на закрытие ( 81f9935 ).
  • Исправление отсутствующих аннулаций при перемещении подвижного контента ( 1d7c024 ).
  • Исправить немедленную аннулацию перемещенного подвижного содержимого ( 8676618 ).

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

  • Избегайте вычисления readableHash в DerivedState , если снимок не был изменен. ( 307102 )
  • Сокращенные выделения ( I65c09 , d7ea77 , 727974 и 445808 ).
  • Быстрая отмена создания CoroutineScopes ( a55362 и bd382f )
  • Перезаписать записи объектов состояния недоступными записями состояния ( c986960 )
  • Используйте композитор правильной области действия при реализации групп ( 9a5e5b6 ).
  • Используйте IdentityArraySet для хранения недействительных снимков ( 7f60cca ).
  • Уменьшить выделение для наблюдений моментальных снимков ( 5bc535f )

Версия 1.5.0-rc01

26 июля 2023 г.

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

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

  • Отложить повторное чтение производных состояний до тех пор, пока не будут записаны изменения ( f38099 ).

  • Доступна дополнительная проверка, рекомендующая перенести вызовы mutableStateOf() в соответствующие им специализированные типы для примитивов. Его идентификатор lint — AutoboxingStateCreation . Ранее эта проверка была включена по умолчанию для всех проектов. Чтобы увидеть это предупреждение в редакторе Android Studio и в результатах lint вашего проекта, измените его серьезность с информационного на предупреждение (или выше), объявив warning "AutoboxingStateCreation" внутри конфигурации вашего модуля build.gradle или build.gradle.kts, как показано ( I34f7e ):

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

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

28 июня 2023 г.

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

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

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

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

7 июня 2023 г.

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

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

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

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

24 мая 2023 г.

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

Изменения API

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

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

  • Сокращенные выделения ( I65c09 , d7ea77 , 727974 и 445808 ).
  • Не сохранять ссылку на снимок в ComposerImpl ( 0206f7 ).
  • Быстрая отмена создания CoroutineScopes ( a55362 и bd382f )
  • Не наносите состав дважды ( f5791b )
  • Обеспечить недействительность неинициализированных значений производного состояния ( aa2a92 ).
  • Вызовите onEndChanges во время удаления композиции. ( 62cc8c )
  • Исправлено перемещение контента в подкомпозицию ( 4beb41 ).
  • Исправьте потенциальные взаимоблокировки ( c1a425
  • ON_STOP должен приостанавливать трансляцию кадров вместо композиции ( f4a2d1 )
  • Исправить измененные флаги для перезапущенных лямбда-выражений ( 8a03e9 ).
  • Выполнить обратные вызовы деактивации для LayoutNode перед удалением эффектов ( 8b0fa4 ).

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

  • Добавлен Snapshot.isApplyObserverNotificationPending ( I672a5 ).

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

10 мая 2023 г.

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

Изменения API

  • Добавлены примитивные версии State API, позволяющие отслеживать значения Int, Long, Float и Double в объектах State без штрафов за автобоксинг. Используйте новые фабричные методы mutableIntState(Int) , mutableFloatStateOf(Float) и т. д., чтобы использовать их. ( I48e43 )

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

  • Вызовите onEndChanges во время удаления композиции. Узлы фокуса, удаленные во время Composition.dispose , подписываются на onEndChanges для сброса фокуса. ( 03d4a47 )

  • Обеспечьте аннулирование неинициализированных значений производного состояния. Каждое производное состояние связано со списком его зависимостей в SnapshotStateObserver , который используется для признания недействительными областей, связанных с производным состоянием, при каждом изменении зависимости. Изменение зависимости регистрируется при перемещении снимка, что может произойти после чтения производного состояния (из-за вызова Snapshot.notifyObjectsInitialized() ).

    Предыдущая логика наблюдения производного состояния в SnapshotStateObserver очищала старые зависимости, а затем считывала новое значение. Это привело к возникновению состояния гонки с аннулированием зависимостей в очищенном состоянии, где недействительность зависимостей не была зарегистрирована.

    Это изменение изменяет порядок чтения производного состояния и очистки зависимостей, гарантируя, что аннулирование всегда происходит в допустимом состоянии. ( c472be6 ​​)

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

19 апреля 2023 г.

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

Изменения API

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

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

  • Исправлен потенциальный тупик в списке снимков и сопоставлении 5c1a425.
  • Выполните обратные вызовы деактивации для LayoutNode перед удалением эффектов 3784073
  • Исправлены измененные флаги для перезапущенных лямбда-выражений ea81df9.
  • Исправлена ​​регрессия живого редактирования для Composable с узлами 73fd4d8.
  • ON_STOP должен приостанавливать передачу кадров вместо композиции ae276f1.
  • Недействительные области SnapshotStateObserver для неизмененных производных состояний 84d9b1c
  • Исправлена ​​возможная тупиковая ситуация при удалении композиций 28761fc.
  • Исправлено перемещение контента в подкомпозицию 92d4156.

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

5 апреля 2023 г.

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

Новые возможности

  • Оператор getValue в Котлине теперь может быть составным ( f174f6e )

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

  • Перезаписать записи объектов состояния недоступными записями состояния ( c986960 )
  • Используйте композитор правильной области действия при реализации групп ( 9a5e5b6 ).
  • Исправлена endToMarker() при завершении группы узлов. ( d71d980 )
  • Использовать текущую группу SlotWriter для проверки деактивации ( a0b518b )
  • Используйте IdentityArraySet для хранения недействительных снимков ( 7f60cca ).
  • Удалите fill в SlotTable.moveSlotGapTo() и переместите ее на закрытие ( 81f9935 ).
  • Исправление отсутствия недействительности при перемещении перемещаемого контента ( 1d7c024 ).
  • Исправить немедленную аннулацию перемещенного подвижного содержимого ( 8676618 ).
  • Уменьшить выделение для наблюдений моментальных снимков ( 5bc535f )

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

22 марта 2023 г.

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

Новые возможности

  • Добавляет Modifier.Node#coroutineScope , позволяющий Modifier.Nodes запускать сопрограммы ( I76ef9 ).
  • Разрешите Modifier.Nodes читать CompositionLocals , реализовав интерфейс CompositionLocalConsumerModifierNode . ( Ib44df )

Версия 1.4

Версия 1.4.3

3 мая 2023 г.

androidx.compose.runtime:runtime-*:1.4.3 выпущен без изменений.

Версия 1.4.2

19 апреля 2023 г.

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

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

  • Исправлена ​​потенциальная тупиковая ситуация в списке снимков и сопоставлении 2eb6570.

  • Добавление содержимого в SnapshotStateList или SnapshotStateMap может привести к взаимоблокировке, если изменение одновременно с прямой записью в запись состояния. Это стало значительно более вероятным благодаря изменениям, внесенным в 93fcae828b , который использует прямую запись для освобождения неиспользуемых записей.

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

Версия 1.4.1

5 апреля 2023 г.

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

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

  • Исправлена endToMarker() при завершении группы узлов. d71d980

Версия 1.4.0

22 марта 2023 г.

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

Важные изменения с версии 1.3.0

  • Используйте инициализированное значение из LiveData для первой композиции 3680e25.
  • Добавьте ComposeNodeLifecycleCallback чтобы наблюдать за жизненным циклом составных узлов. 8b6a258
  • Добавьте свойство parameterTypes в ComposableMethod 7b6c7ad.

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

  • Очистите оба индекса области в SnapshotStateObserver 29f4a3e.
  • Добавьте необходимые группы в тело непропускаемых лямбда-выражений 7d06752.
  • Улучшены характеристики ссылки на память состояния моментального снимка 93fcae8.
  • Удалить бокс в составе локального поиска 0875717
  • Используйте правильный ключ для групп узлов одноразового использования 6388d8d
  • Защита SnapshotStateObserver от рекурсивных и параллельных применений 98cb6ba
  • Добавлена ​​проверка границ контрольного индекса в методе «get» IdentityArraySet 35a77d3.
  • Обновите модуль Compose для использования расширений ViewTreeLifecycleOwner 21c2122.
  • Отправлять уведомления о применении после того, как Recomposer завершит кадр. 98f2641
  • Исправлен сбой индекса за пределами границ при отмене Recomposer 8f8656f.
  • Всегда принудительно перекомпоновывать, если родительские поставщики композиции изменили 9526fcc.
  • Допуск рекомпозера для отмененных заданий a55f7ed
  • Улучшена обработка недействительности для большого количества композиторов 9b7ed67.
  • Исправлено создание закрывающих групп для нелокальных возвратов b6f590c.

Версия 1.4.0-rc01

8 марта 2023 г.

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

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

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

22 февраля 2023 г.

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

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

8 февраля 2023 г.

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

Изменения API

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

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

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

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

25 января 2023 г.

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

Изменения API

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

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

11 января 2023 г.

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

Изменения API

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

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

  • Защитить SnapshotStateObserver от рекурсивных и параллельных применений ( d902fb )

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

7 декабря 2022 г.

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

Изменения API

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

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

  • Уведомления о применении моментальных снимков теперь отправляются после того, как Recomposer завершит применение изменений. ( Iad6c0 , b/222093277 )

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

9 ноября 2022 г.

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

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

24 октября 2022 г.

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

Изменения API

  • SnapshotStateList и SnapshotStateMap теперь имеют явную реализацию toList() и toMap() . Эти методы возвращают свое текущее содержимое без создания копии, поскольку они возвращают внутренние неизменяемые данные, используемые для хранения их содержимого. Это значение можно использовать, например, для создания потока значений с помощью snapshotFlow без необходимости копирования данных. ( Ica2bd )

Версия 1.3

Версия 1.3.3

11 января 2023 г.

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

  • Никаких изменений с версии 1.3.2

Версия 1.3.2

7 декабря 2022 г.

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

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

  • Обновлено для поддержки androidx.compose.ui 1.3.2.

Версия 1.3.1

9 ноября 2022 г.

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

Версия 1.3.0

24 октября 2022 г.

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

Важные изменения с версии 1.2.0

Обработка исключений/поддержка живого редактирования

Трассировка композиции

Составные API-интерфейсы отражения

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

Система моментальных снимков

Версия 1.3.0-rc01

5 октября 2022 г.

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

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

  • Исправлено ArrayIndexOutOfBoundsException , возникающее из таблицы слотов ( b/249076084 ).

Версия 1.3.0-beta03

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

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

Изменение поведения

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

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

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

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

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

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

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

24 августа 2022 г.

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

Изменения API

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

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

10 августа 2022 г.

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

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

27 июля 2022 г.

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

Изменения API

  • Повторно добавлен ComposerKt.traceEventStart(Int, String) для обратной совместимости ( I6e6de ).

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

29 июня 2022 г.

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

Изменения API

  • Перенос функциональности утилиты во время выполнения ( I4f729 )

Версия 1.2

Версия 1.2.1

10 августа 2022 г.

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

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

  • Исправлена ​​утечка памяти: удаляйте вложенные снимки, созданные из прозрачных снимков b/239603305.

Версия 1.2.0

27 июля 2022 г.

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

Важные изменения с 1.1.0

  • В Compose Runtime появилось несколько функций, представленных в версии 1.2.0, а также множество исправлений ошибок, стабилизирующих работу. Наиболее важной новой функцией стало введение API movableContentOf , который можно использовать для включения сложного пользовательского интерфейса, такого как переходы общих элементов. API movableContentOf преобразует составную лямбду в лямбду, которая перемещает ее состояние и соответствующие узлы в любое новое место, которое она вызывает. Когда предыдущий вызов покидает композицию, состояние временно сохраняется, и если новый вызов лямбды входит в композицию, то состояние и связанные с ним узлы перемещаются в место нового вызова. Если новый вызов не добавлен, состояние удаляется навсегда, и помните, что наблюдатели будут уведомлены.

  • Если лямбда 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 содержит эти коммиты.

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

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

Версия 1.2.0-rc02

22 июня 2022 г.

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

Версия 1.2.0-rc01

15 июня 2022 г.

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

Изменения API

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

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

1 июня 2022 г.

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

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

18 мая 2022 г.

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

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

11 мая 2022 г.

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

Новые возможности

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

Изменения API

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

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

20 апреля 2022 г.

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

Изменения API

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

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

6 апреля 2022 г.

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

Изменения API

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

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

23 марта 2022 г.

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

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

9 марта 2022 г.

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

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

  • Обновлено для использования сопрограмм Kotlinx 1.6.0 ( I3366d ).

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

23 февраля 2022 г.

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

Изменения API

  • Добавлены ComposableTarget , ComposableTargetMarker и ComposableOpenTarget , которые позволяют во время компиляции сообщать о том, когда компонуемая функция вызывается с таргетингом на приложение, для которого она не предназначена.

    В большинстве случаев аннотации могут быть выведены плагином компилятора Compose, поэтому непосредственное использование этих аннотаций должно быть редким. Случаи, которые не могут быть выведены, включают создание и использование пользовательского приложения, абстрактных составных функций (таких как методы интерфейса), полей или глобальных переменных, которые являются составными лямбда-выражениями (выводятся локальные переменные и параметры), или при использовании ComposeNode или связанных составных функций. .

    Для пользовательских приложений составные функции, которые вызывают ComposeNode или ReusableComposeNode должны добавить аннотацию CompoableTarget для функции и любых составных типов лямбда-параметров. Однако рекомендуется создать аннотацию, помеченную с помощью ComposableTargetMarker , а затем помеченную аннотацию использовать непосредственно вместо ComposableTarget . Составная аннотация, помеченная ComposableTargetMarker эквивалентна ComposbleTarget с полным именем класса атрибута в качестве параметра применения. Для примера использования ComposableTargetMarker см. anroidx.compose.ui.UiComposable . ( I38f11 )

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

9 февраля 2022 г.

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

Изменения API

  • Добавлен movableContentOf , который преобразует композиционную лямбду в лямбду, которая перемещает его состояние и соответствующие узлы, в любое новое местоположение, которое она называется. Когда предыдущий вызов покидает композицию, состояние временно сохраняется, и если новый вызов 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-beta04

1 декабря 2021 г.

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

Новые возможности

  • Обновлено, чтобы быть совместимым с Kotlin 1.6.0

Версия 1.1.0-beta03

17 ноября 2021 г.

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

Версия 1.1.0-beta02

3 ноября 2021 г.

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

Изменения API

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

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

27 октября 2021 г.

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

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

13 октября 2021 г.

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

Изменения API

  • Удален InternalCompilerApi из методов композитора, которые необходимо назвать кросс-модулем ( 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 или его эквиваленте. В файле указывается правило для каждой строки, где правило в данном случае представляет собой шаблон для сопоставления с методами или классами в библиотеке. Синтаксис этих правил представляет собой расширенный набор удобочитаемого формата профиля ART, который используется при использовании adb shell profman --dump-classes-and-methods ... . Эти правила принимают одну из двух форм и ориентированы либо на методы, либо на классы.

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

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

    <CLASS_DESCRIPTOR>
    
  • Здесь <FLAGS> — это один или несколько символов H , S и P , указывающие, следует ли пометить этот метод как «Горячий», «Запуск» или «После запуска».

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

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

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

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

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

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

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

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

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

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

Версия 1.0.0-beta08

2 июня 2021 г.

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

Изменения API

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

Версия 1.0.0-бета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-бета03

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

24 февраля 2021 г.

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

Это первый выпуск Compose 1.0.0 Beta.

Изменения API

  • Добавить Recomposer.runRecomposeConcurrentlyAndApplyChanges экспериментальный API для переоборудования недействительных композиций с основной петли кадра. ( I342d0 )
  • Любые композиции, помеченные @readonlycomposable, теперь подтверждены временем компиляции, чтобы убедиться, что они выполняют только другие @readonlycomposables ( i58961 )
  • defaultFactory для compositionLocalOf и staticCompositionLocalOf теперь требуется вместо необязательного.

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

    Для нулевых типов рассматривайте возможность поставки { null } в качестве фабрики по умолчанию.

    Мы не рекомендуем использовать местных жителей с не нулевами типами, если не может быть предоставлено разумное значение по умолчанию. Если не существует разумного по умолчанию, Lambda defaultFactory должна выдать исключение. Однако бросание исключения означает, что потребители местного населения будут иметь неявную зависимость от его предоставления, которая не применяется типовой системой. ( IFBD2A )

  • Униженные символы были удалены со времени выполнения Compose ( i3252c )

  • Установленный emptyContent() удаляется. Используйте {} вместо этого. ( IDB33F , B/179432510 )

  • Поставщики были переименованы в CompositionLocalProvider

    • Конструктор композиции больше не принимает ключевой параметр и устарел.
    • CurrentCompositeKyhash был превращен в композиционное свойство верхнего уровня вместо композиционной функции верхнего уровня.
    • CompositionData и CompositionGroup были перемещены на Androidx.compose.runtime.tooling Пространство имен
    • ComposableLambda был сделан интерфейсом вместо бетонного класса, и больше не имеет параметров типа.
    • ComposableLambdan был сделан интерфейсом вместо бетонного класса, и больше не имеет параметров типа.
    • Функция снимка была перемещена на Androidx.compose.Runtime Пространство имен
    • Метод слияния SnapshotMutation ProLicy больше не экспериментальный
    • Функция @Testonly Top Level ClearRoots была удалена. В этом больше нет необходимости.
    • KeySourceInFoof и ResetSourceInfo функции были удалены. Они больше не нужны.
    • Composer.collectkeySourceInformation была удалена. В этом больше нет необходимости.
    • Isjoinedkey, JoinedKeyLeft и методы kinedKeyright были удалены. Они больше не нужны.
    • Различные API верхнего уровня были перемещены и реорганизованы в разные файлы. Из -за семантики класса файлов Kotlin, это сломает бинарную совместимость, но не совместимость с источником, поэтому не должно быть проблемой для большинства пользователей.
    • ( I99B7D , B/177245490 )
  • SnapshotstateObserver больше не экспериментален ( ID2E6A )

  • Удалили некоторые ранее устаревшие API ( ICE5DA , B/178633932 )

  • Внесли следующие изменения API материала:

    • Добавлен параметр ContentPadding в верхний/нижний апбар, чтобы разрешить настройку накладки по умолчанию.
    • Переупорядоченные параметры в фоне
    • Перенесенный параметр icon в BottomNavigationItem, чтобы быть selected и onClick .
    • Переименовано в параметр alwaysShowLabel alwaysShowLabels в нижней части.
    • Переименованные параметры bodyContent в нескольких компонентах, чтобы просто content .
    • Переупорядоченные параметры в ButtonDefaults.buttonColors() . Обратите внимание, что, поскольку тип параметров не изменился, это не приведет к ошибке в вашем коде - пожалуйста, убедитесь, что вы либо используете названные параметры, либо обновляете заказ вручную, в противном случае ваш код не будет работать так же, как и ранее.
    • Добавлен secondaryVariant параметр в darkColors() . Этот цвет, как правило, такой же, как и secondary в темной теме, но добавление для последовательности и дальнейшей настройки.
    • Удаленные возвышения и оживления () с общественной поверхности API, поскольку они не использовались / полезны.
    • Переименовано onValueChangeEnd в Slider , чтобы onValueChangeFinished и сделать его нулевым.
    • Переименованный параметр text в Snackbar к content для последовательности.
    • Добавлен параметр contentPadding в DropdownMenuItem , чтобы позволить настройку настройки по умолчанию, а content - расширение на RowScope .
    • Переименован ModalDrawerLayout в ModalDrawer .
    • Переименован BottomDrawerLayout до BottomDrawer .
    • ( I1CC66 )

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

10 февраля 2021 г.

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

Изменения API

  • Поддержка ViewGroups была удалена из UIAPPLIER. Установленные композиции Emitview были удалены. ( IFB214 )
  • CompositionReference переименован в CompositionContext ( i53fcb )
  • ComponentActivity.SetContent перенесла на Androidx.Activity.compose.SetContent в модуле AndroidX.Activity: Compose-Compose. ( ICF416 )
  • API Snapshot был обновлен, чтобы быть более соответствующим руководству API, а также скрывать внутренние классы реализации от публичного API. ( ID9E32 )
  • Переименованные в окружающую среду, чтобы соответствовать окружающей среде -> композиционное переименование. Амбиденты раньше назывались AmbientFoo, теперь композиции называются Localfoo. ( I2d55d )
  • Переименовано в окружающую среду до композиции, а также abbientof / staticambientof to compositionlocalof / staticcompositionlocalof соответственно. Это изменение помогает сделать цель композиции более ясным: механизм для обеспечения / извлечения значений локально для композиции. Композиционные экземпляры должны быть предварительно профиксированы с Local , такими как val localfoo = compositionlocalof {foo ()}. ( IA55B6 )
  • TakeMutablesNapShot и TakesNapShot стали сопутствующими методами снижения. ( I91f19 )
  • @ComposableContract был устарел в пользу еще трех специфических аннотаций.

    @ComposableContract(restartable = false) стал @NonRestartableComposable @ComposableContract(readonly = true) стал @ReadOnlyComposable @ComposableContract(preventCapture = true) стал @DisallowComposableCalls @ComposableContract(tracked = true) был удален. ( I60a9d )

  • EmptyContent () и (@composable () -> Unit). Orempty () Утилиты устарели, поскольку они больше не оказывают положительного воздействия на производительность или значения ( I0484D )

  • snapshotFlow и withMutableSnapshot больше не экспериментальные ( i6a45f )

  • Перестроители теперь могут быть закрыты. Закрытые рецимпозиторы будут продолжать переоценить до тех пор, пока не завершится коратики для детей. Recomposer.shutdown переименован в отмену, чтобы контрастировать с близким. ( IB6D76 )

  • compose:runtime-dispatch теперь устарел. Теперь можно найти MonotonicFrameClock: Compose: Среда выполнения и AndroidEIDISPATCHER можно найти в Compose: UI. ( IB5C36 )

  • API The Compose Compiler Plugin Targets был рефактирован для использования интерфейса вместо бетонного класса. Интерфейс также больше не использует параметр типа.

    Это внутреннее изменение, которое не должно влиять на совместимость исходного кода, но является бинарным разрывом. ( I3B922 , B/169406779 )

  • Был введен Snapshotmutablestate ( ICFD03 )

  • IssosableEffectDisposable был переименован в утилизацию EffectResult ( ICA7C6 )

  • Удален recomposer.current (). [Аннотация] ComposeView теперь по умолчанию для лениво созданных, рецимпозиторов с окнами, управляемыми ViewTreelifeCycleowner для окна. Клеки анимации на основе переоборудования и Framenanos приостановлены, а жизненный цикл хозяина остановлен. ( I38e11 )

  • Recomposer.RunningRecomposers теперь предлагает глобальный штат Stateflow только для чтения Recomposerinfo для наблюдения за текущим состоянием композиции в процессе. Предпочитаю этот API recomposer.current (), который сейчас устарел. ( If8ebe )

  • IssosableEffectDisposable был переименован в удалении EffectResult ( i3ea68 )

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

28 января 2021 г.

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

Изменения API

  • Oncommit, Ondispose и Onactive были устарели в пользу API -интерфейсов SideEffect и OndayableEffect ( IF760E )
  • Emit () API и все перегрузки были устарели и переименованы в Composenode. API идентичны, просто другое название, чтобы следовать соглашениям об именах Compose ( I4137B )
  • Invalidate и CompositionReference () в настоящее время устанавливаются в пользу CurrentRecomposeScope и MamescompositionReference соответственно. ( I583a8 )
  • Помните, что заменяет CompositionLifeCycleObserver, а CompositionLifeCycleObserver теперь устарел.

    RememberObserver - это замена для CompositionLifecycleObserver с модифицированной семантикой и переименованными методами. Переход на новый API может быть сделан механическим для объектов, которые запоминаются только один раз, что является и продолжает оставаться рекомендуемой практикой. Однако, если ссылка запомнилась более одного раза в композиции onRemembered требуется для каждой ссылки, где onEnter называется только один раз. onEnter был назван несколько раз, если объект использовался в подкомпозициях, таких как WithConstraints и Scaffold делая единственную гарантию вызова onEnter , ненадежную, и он был удален для RememberObserver .

    Помните, что RememberObserver добавляет onAbandoned , который называется, если экземпляр RememberObserver возвращается из обратного вызова, чтобы remember , но его не помнили в состоянии композиции, и, следовательно, никогда не onRemembered . Это может произойти, если исключение завершает композицию перед завершением или композиция отбрасывается, потому что состояние производит композицию, для которого больше не является точкой или иным образом не требуется. Если экземпляр RememberObserver следуя указанной выше рекомендации, отслеживает внешний ресурс как onForgotten , так и onAbandoned каждом из них указывает на то, что ресурс больше не нужен. Если объект отслеживает работу, или ресурсы, распределенные в onRemembered , onAbandoned может быть проигнорирован, так как его не будут вызваны, если будет вызвано onRemembered . ( I02C36 )

  • Не отмечать функции collectAsState() как встроенные ( IA73E4 )

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

  • С Constraints был переработан как BoxWithConstraints и переехал на Foundation.layout. ( I9420B , B/173387208 )
  • Использовать тестовый тестовый

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

13 января 2021 г.

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

Нарушение изменения

  • Реструктуризация API внутреннего компилятора позволяет падать изменения в узлах, сгенерированных в результате композиции в фазу «применение изменений» композиции, после того как все функции @Composable завершились.

    Это поведенческое нарушение изменений, которое может повлиять на код приложения, поскольку узлы больше не доступны из внутренних и экспериментальных API до тех пор, пока не будут применены изменения. Обычно это можно обойти окружающим кодом с такими зависимостями в SideEffect композиции, чтобы отложить выполнение кода до тех пор, пока узлы не будут созданы и инициализированы. ( I018DA )

Изменения API

  • Добавил способ отслеживать, если рецимпасатор применил изменения. ( I1b3e2 )
  • Разверните [Abstract] API Composeview, чтобы разрешить переработку на основе просмотров, распорядившись их композицией, чтобы снова воссоздать позже. Добавьте API для установки и обнаружения рекомкомпозиторов с окнами и композиции для создания дочерних композиций.

    Добавить ViewCompositionStrategy для настройки стратегии утилизации композиции [Abstract] ComposeViews; Поведение по умолчанию утилизируется в окне. ( I860ab )

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

  • Recomposer теперь выявляет поток своего текущего состояния, позволяя контролировать ее активность и активность связанных эффектов. ( IFB2B9 )
  • К имени, теперь можно получить доступ через KeyEvent.NativeKeeVent ( I87C57 , B/173086397 )

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

16 декабря 2020 г.

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

Изменения API

  • Удален слот -шлотчиком и слотом от публичного API. Они были отмечены как InternalComposeapi ранее. Теперь они внутренние для модуля Compose.

    CompositionData и CompositionGroup добавляли в качестве замены для API-интерфейса для пользовательского интерфейса для использования для извлечения информации композиции. Они общедоступны, но не предназначены для использования за пределами API-интерфейса пользовательского интерфейса, поскольку они предоставляют необработанную информацию, которую интерпретирует API-интерфейс пользовательского интерфейса ( i31a9c )

  • Класс Applier больше не считается ( ID85B0 )

  • Интерфейс Applier изменился, чтобы упростить строительные деревья снизу вверх, а не сверху вниз.

    Метод insert() был переименован в insertTopDown() .

    Был добавлен новый метод, insertBottomUp() .

    Applier либо вставляет узлы в дерево, которое он редактирует, используя insertTopDown() или insertBottomUp() в зависимости от того, что работает лучше.

    Некоторые деревья, такие как LayoutNode и View , гораздо более эффективны для строительства снизу вверх, чем сверху вниз. Перед этим изменением была необходима стопка вставки для реализации снизу вверх, который необходимо было скопировать каждому прикладному приложению, который нуждался в конструкции снизу вверх для производительности. При этом изменение Applier переопределение insertBottomUp() для построения восходящего дерева и insertTopDown() , чтобы построить дерево сверху вниз. ( ICBDC2 )

  • Составьте поддержку имущественных добычи, которые могут сделать композиционные вызовы. Поддержка этого не исчезнет, ​​но синтаксис для объявления имущества Getter как @composable меняется.

    Недооцененный синтаксис для этого был путем аннотирования самой собственности:

        @Composable val someProperty: Int get() = ...
    

    Синтаксис в настоящее время для этого-это аннотирование Getter of the Property:

       val someProperty: Int @Composable get() = ...
    

    Оба синтаксиса будут работать в течение некоторого времени, но первый устаревший синтаксис в конечном итоге станет ошибкой компиляции. ( ID9197 )

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

  • AndroidOwner сделан внутренним ( IBCAD0 , B/170296980 )
  • SubComposeInto (LayoutNode) был сделан внутренним ( ID724A )

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

2 декабря 2020 г.

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

Изменения API

  • Добавлена ​​проверка на пробег для композиционного именования параметров Lambda, чтобы проверить согласованность с руководящими принципами составления. Также мигрировал некоторые API, используя children в качестве названия для их запекания Lambda до content , согласно проверке и руководству. ( IEC48E )
  • Recomposer больше не принимает EnceddingContext; Требуемые зависимости планирования получены из EffectCoroutIneContext. FrameManager устарел; Интеграции платформы должны инициализировать свою собственную глобальную обработку снимков. ( I02369 )
  • RestorAbleStateholder.WithRestorAbleState был переименован в RestorAbleStateProvider ( I66640 )

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

  • Установившись в окружающей среде, названные с Ambient в качестве суффикса, и заменили их новыми свойствами, префиксированными окружающей средой, следуя за другими окружающими, и составил руководящие принципы API. ( I33440 )
  • Удалить старый модуль UI-теста и его заглушки ( i3a7cb )

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

11 ноября 2020 г.

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

Новые возможности

Изменения API

  • Аннотация @UnionType установилась ( i57cde )
  • При условии, что это была добавлена ​​в качестве альтернативы, чтобы обеспечить предоставление окружающих средств, и его можно использовать для указания значений окружающей среды, которые будут установлены только тогда, когда уже не будет предоставлено средняя стоимость. ( ID6635 , B/171024925 )
  • Запущенная и была переименована в запуск для согласованности с API API -интерфейсом SideEffect и OndayableEffect. Запущенное вмешательство без предмет Params не разрешено для того, чтобы поощрять передовые практики. ( IFD3D4 )
  • Applier теперь имеет обратные вызовы OnBeginChanges/OnenDChanges, которые вызываются, когда композитор начинает/закончит применять изменения в дереве. Они могут быть использованы для управления партии ресурсов, если это необходимо. ( ICF476 )
  • Recomposer теперь требует CoroutineContext на строительстве ( IC4610 )
  • Изменения во внутренней неразборчивой реализации, которая не должна влиять на публичный API. ( IF9828 )
  • Умеренные адаптеры Rxjava2, которые не принимают начальное значение, были удалены ( IDB72F )

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

  • Foundation.Text был устарел и заменен на материал. Текст. Для базового, неопинозированного текстового API, который не потребляет значения из темы, см. Androidx.compe.foundation.basictext. ( IF64CB )
  • Basetextfield устарел. Вместо этого используйте BasicTextField. ( I896EB )
  • Несколько символов, связанных с макетом, были перемещены с Androidx.compose.ui на androidx.compose.layout.ui. ( I0FA98 , B/170475424 )

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

  • Добавлен модуль runtime-rxjava3 для Compose. Похоже на runtime-rxjava2 ( I02CBF )

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

28 октября 2020 г.

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

Изменения API

  • Recomposer теперь является композицией и действительным родителем композиции. Откровенный рецимпозитор теперь требуется в меньшем количестве мест. ( I4036f )
  • Добавлены API аналога одноразового определения в сторону, заполняя роль Oncommit-with-params, но с необходимым Ondispect.
    • Добавлены API API, чтобы опубликовать данные от переоборудования до текущих или долгоживущих процессов, таких как одноразовые, или запускаемые ноги.
    • ( ID50b9 )
  • Intablevector теперь реализует randomaccess ( i85d73 , b/170461551 )
  • Добавлена ​​боковая композиция для применения побочных эффектов композиции к объектам, управляемым композицией. SideEffect предназначен для замены композиции OnCommit. ( IA77C2 )
  • Новый экспериментальный API RestorableStateholder. Это позволяет сохранить состояние, определенное [saveInstanceTate] и [RemembersAvedInStanceTate] для поддерево, прежде чем утилизировать его, чтобы сделать его обратно в следующий раз с восстановленным состоянием. ( I66884 , B/166586419 )

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

  • Включить переходы в Composetestrule; Удалите опцию, чтобы включить мигающий курсор из Composetestrule. ( If0de3 )

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

14 октября 2020 г.

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

Изменения API

  • Экспериментальный модификатор.pointerInput подвеска входного модификатора ( IA77D2 )
  • Прокрутка прокрутки Lazycolumn/Row улучшается, выполняя меньше работы в подкомпозиции на каждом свитке. Новый метод hasInvalidations () был добавлен для класса композиции. Метод haspendingChanges () от Recomposer был переименован в HasInvalidations () ( IB2F32 , B/168293643 , B/167972292 , B/165028371 )
  • Добавить API -API -т. Д. для запуска CORUTINES из композиции, которые обновляют одно значение State<T> с течением времени ( ID4A57 )
  • Запуск Incomposition переименован в запуск в соответствии с руководящими принципами Compose API ( i99a8e )
  • Вызовы Order of Place в пользовательских макетах теперь определяют порядок рисования для детей ( IBC9F6 )

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

1 октября 2020 г.

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

Изменения API

  • Добавлен владельцы, чтобы позволить сбору макетов и рисования областей наблюдений, как только они больше не будут действительными. ( IC4CF8 )
  • Добавлен DEFIVEDSTATEOF API для создания объектов состояния на основе расчета, который может считывать (и получить из) других объектов состояния ( IF758B )
  • Добавлен API Testonly для SnapshotStateObserver ( i6e2a9 )

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

  • Foundation.box был устарел. Пожалуйста, используйте foundation.layout.box вместо этого. ( IE5950 , B/167680279 )

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

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

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

Изменения API

  • CompositionCoroutineScope больше не реализует MonotonicFrameClock . Абоненты withFrameNanos должны явно импортировать функцию верхнего уровня. ( ICB642 , B/166778123 )

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

  • Функции глобального тестирования, такие как onNode или waitForIdle теперь устаревают, пожалуйста, перейдите на свои новые аналоги, которые определены на Composetestrule ( i7f45a )
  • launchInComposition больше не запускает Coroutines не сообщается ( IEF6AF , B/166486000 )

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

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

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

Изменения API

  • Добавьте API snapshotFlow withMutableSnapshot для потребления и создания изменений данных снимка. ( I3e722 )
  • Призывная конвенция для композиционных функций изменилась. Это бинарное нарушение. Все библиотеки должны быть перекомпилированы, чтобы работать с этой версией плагина Compose Compiler.

    Это изменение не создает изменение нарушения уровня источника, поскольку единственные API, которые изменились, - это API компилятора, которые имеют явный выбор ( i7afd2 , b/158123185 )

  • Удаленные методы планирования из EnceddingContext ( i7b9be )

  • На промежутке устарел; У Oncommit теперь есть поведение Procommit.

    Oncommit и Onactive теперь работают в той же кадре хореографа, в которой композиция изменяется, а не в начале следующей кадры хореографа. ( I70403 )

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

26 августа 2020 г.

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

Версия 0.1.0-Dev

Версия 0.1.0-dev17

19 августа 2020 г.

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

Изменения API

  • Пользовательские излучения теперь могут заявить, что один или несколько его сеттеров могут быть пропущены и перечислены независимо от Emit. ( IBBD13 )
  • Удаленные устаревшие вызовы FrameManager.

    Внутренние API -интерфейсы были изменены, чтобы уменьшить количество накладных расходов, чтобы отслеживать объекты состояния, такие как mutableStateof() ( i80ba6 )

  • state { ... } композитное теперь устарело в пользу явных вызовов remember { mutableStateOf(...) } для ясности. Это уменьшает общую поверхность API и количество понятий для управления состоянием и соответствует шаблону by mutableStateOf() для делегирования свойства класса. ( IA5727 )

  • Flow.collectasstate теперь определяет диспетчер по умолчанию из самой композиции, а не дефолта для диспетчеров. Main. ( I9c1d9 )

  • Сбой, когда что -то, что сохраняет состояние, использовалось внутри петли для FOR, исправлено. Теперь, имея тот же ключ в SavedInStanceState (), разрешен, API UisavedStateRegistry теперь корректируется с этим новым требованием ( i4ab76 , b/160042650 , b/156853976 , b/159026663 , b/154920561 )

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

  • emitView был устарел. Используйте AndroidView вместо этого, если возможно, для излучения видов внутри Compose. Обратите внимание, что сочинение представлений и групп Views напрямую не будет поддерживаться в будущем, если только это листья в дереве композиции, случай, когда это может быть достигнуто с помощью AndroidView. ( I29b1e , b/163871221 )

Версия 0.1.0-Dev16

5 августа 2020 г.

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

Изменения API

  • Политика мутации по умолчанию mutableStateOf() , ambientOf() и savedInstanceStateOf() изменилась, чтобы быть structuralEqualityPolicy() вместо referentialEqualityPolicy() .

    По умолчанию для принятия решения о том, является ли новое значение, назначенное экземпляру mutableStateOf() считается изменением, теперь по умолчанию использует == вместо использования === .

    См. Https://kotlinlang.org/docs/reference/equality.html

    ambientOf() и savedInstanceStateOf() используйте mutableStateOf() в своих реализациях, чтобы они были изменены, чтобы соответствовать mutableStateOf() .

    Использование структурного равенства более близко соответствует ожиданиям разработчиков.

    Например,

    val state = mutableStateOf(1f)
    

    с последующим,

    state.value = 1f
    

    больше не будет рассматривать изменение state , и использование state во время композиции больше не нужно будет перечислять.

    Это нарушающее изменение, но в большинстве случаев (например, при использовании классов, которые не переопределяют equals() ), это не окажет заметного влияния на приложение.

    Классы, которые переопределяют equals() , такие как классы data , могут видеть деградацию производительности, поскольку их методы equals() теперь по умолчанию называются при назначении mutableStateOf() .

    Предыдущее поведение может быть восстановлено путем добавления policy = referentialEqualityPolicy() к призывам к mutableStateOf() , ambientOf() и savedInstanceStateOf() . ( IC21A7 )

  • Row и Column теперь являются встроенной функцией, значительно сокращают накладные расходы их использования. ( I75c10 )

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

  • SetViewContent был устарел. SetContent должен использоваться вместо этого. ( I7e497 , b/160335130 )
  • Добавлен MonotonicframeanimationClock, который позволяет использовать монотонный фрамиклок в качестве анимации, чтобы преодолеть разрыв между новыми часами на основе Coroutines и API, которые все еще используют старые часы на основе обратного вызова.

    Монотонным фрагментом, эквивалентным HanualanimationClock, теперь является ManualFrameClock. ( I111c7 , b/161247083 )

  • Modifier.StatedRaggable был полностью переработан и переименован в модификатор. Был введен новый класс Swipeablestate, и стержень и NotherDrawerTate были реформированы, чтобы наследовать от него. [Modal/снизу] BradeRlayout больше не принимает параметр onstateChange. ( I72332 , B/148023068 )

  • MODIFIER.PLUS был устарел, используйте модификатор. Тогда вместо этого. «Тогда» имеет более сильный сигнал упорядочения, в то время как также запрещает тип Modifier.padding().background() + anotherModifier , который разбивает цепь и труднее читать ( IEDD58 , B/161529964 )

  • Subcomposelayout добавлен. Это примитив низкого уровня, который позволяет составлять детей во время измерения, если мы хотим использовать некоторые значения, доступные только позже во время меры для состава поддерею. Например, с Constraints не реализуется с использованием Subcomposelayout. ( I25cc8 )

  • Материал заполненного текстового зале был переименован в Textfield, а основополагающее текстовое поле было переименовано в Basetextfield, чтобы сделать самый простой желаемый API легко обнаружить и использовать ( IA6242 , B/155482676 )

  • MODIFIER.Drawbackground был переименован в Modifier.Background ( I13677 )

Версия 0.1.0-Dev15

22 июля 2020 г.

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

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

  • Чтобы использовать версию Compose 0.1.0-dev15 , вам необходимо будет обновить свои зависимости в соответствии с новыми фрагментами кода, показанными выше при объявлении зависимостей .

Изменения API

  • @Model Аннотация теперь устарела. Используйте состояние и mutablestateof в качестве альтернатив. Это решение об испаке было принято после долгих тщательных дискуссий.

    Обоснование

    Обоснование включает, но не ограничивается:

    • Уменьшает площадь поверхности API и концепции, которые нам нужны для обучения
    • Более близко к другим сопоставимым инструментальным наборам (Swift UI, React, Flutter)
    • Обратимое решение. Мы всегда можем вернуть @Model позже.
    • Удаляет использование угловых вариантов и трудно ответить на вопросы о настройке @Model как вещи, которые нам нужно справиться
    • @Model Classes, Equals, Hashcode и т. Д.
    • Как у меня есть некоторые свойства «наблюдаемые», а другие нет?
    • Как мне указать структурное и ссылочное равенство, которое будет использоваться в наблюдении?
    • Уменьшает «магию» в системе. Снизит вероятность того, что кто -то предполагает, что система будет умнее, чем есть (т.е. он знал, как различить список)
    • Делает гранулярность наблюдения более интуитивно понятной.
    • Улучшает рефакторность от переменной -> свойство в классе
    • Потенциально открывает возможности для создания оптимизации с конкретным состоянием вручную
    • Более близко к остальной части экосистемы и снижает неоднозначность в сторону неизменного или нас, «охватывающего изменяемое состояние»

    Миграционные заметки

    Почти все существующие использование @Model довольно тривиально трансформированы одним из двух способов. Приведенный ниже пример имеет класс @Model с двумя свойствами только ради примера, и он используется в композитном.

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