Создание среды выполнения
androidx.compose.runtime
androidx.compose.runtime.rxjava2
androidx.compose.runtime.rxjava3
androidx.compose.runtime.saveable
androidx.compose.runtime.snapshots
( См. справочную документацию по API для всех пакетов создания )
Последнее обновление | Стабильный выпуск | Кандидат на выпуск | Бета-версия | Альфа-релиз |
---|---|---|---|---|
21 августа 2024 г. | 1.6.8 | 1.7.0-rc01 | - | - |
Структура
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-rc01
21 августа 2024 г.
Выпущен androidx.compose.runtime:runtime-*:1.7.0-rc01
. Версия 1.7.0-rc01 содержит эти коммиты .
Версия 1.7.0-beta07
7 августа 2024 г.
Выпущен androidx.compose.runtime:runtime-*:1.7.0-beta07
. Версия 1.7.0-beta07 содержит эти коммиты .
Версия 1.7.0-beta06
24 июля 2024 г.
Выпущен androidx.compose.runtime:runtime-*:1.7.0-beta06
. Версия 1.7.0-beta06 содержит эти коммиты .
Версия 1.7.0-бета05
10 июля 2024 г.
Выпущен androidx.compose.runtime:runtime-*:1.7.0-beta05
. Версия 1.7.0-beta05 содержит эти коммиты .
Версия 1.7.0-beta04
26 июня 2024 г.
Выпущен androidx.compose.runtime:runtime-*:1.7.0-beta04
. Версия 1.7.0-beta04 содержит эти коммиты .
Версия 1.7.0-бета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с)
Исправления ошибок
- Используйте ссылочную политику для составления состояния локальной области в контексте. (83361c)
- Ограничьте захват $dirty встроенными лямбда-выражениями. (acfca0)
- Исправлена ошибка, из-за которой перемещаемый контент иногда получал неправильные локальные элементы композиции. (035cd6)
- Используйте более быстрые хэш-карты без выделения памяти в
RecomposeScopeImpl
. (д79494) - Используйте
ObjectIntMap
вDerivedState
. (21862е) - Используйте
IntRef
для intSnapshotThreadLocal
вDerivedState
. (04eaf4)
Версия 1.6.0-альфа08
18 октября 2023 г.
Выпущен androidx.compose.runtime:runtime-*:1.6.0-alpha08
. Версия 1.6.0-alpha08 содержит эти коммиты.
Исправления ошибок
- Жизненные циклы
RememberObserver
запускаются только тогда, когда они сохраняются в расчете запоминания. ( f6b4dc ) - Улучшите распределение при сортировке списков недействительности. ( 954d63 )
- Используйте новые нераспределяющие карты в
SnapshotStateObserver
. ( 4303ce ) - Устраните недействительность при деактивации композиции. ( e001be )
Версия 1.6.0-альфа07
4 октября 2023 г.
Выпущен androidx.compose.runtime:runtime-*:1.6.0-alpha07
. Версия 1.6.0-alpha07 содержит эти коммиты.
Изменения API
-
SnapshotStateList
теперь помечен какRandomAccess
чтобы можно было использовать версию помощников списка с прямой индексацией. ( I5210c , б / 219554654 )
Версия 1.6.0-альфа06
20 сентября 2023 г.
Выпущен androidx.compose.runtime:runtime-*:1.6.0-alpha06
. Версия 1.6.0-alpha06 содержит эти коммиты.
Версия 1.6.0-альфа05
6 сентября 2023 г.
Выпущен androidx.compose.runtime:runtime-*:1.6.0-alpha05
. Версия 1.6.0-alpha05 содержит эти коммиты.
Версия 1.6.0-альфа04
23 августа 2023 г.
Выпущен androidx.compose.runtime:runtime-*:1.6.0-alpha04
. Версия 1.6.0-alpha04 содержит эти коммиты.
Новые возможности
- Повторное создание исключений, которые проглатываются во время цикла рекомпозиции ( 4dff9a ).
Изменения API
- Добавлен метод деактивации
ReusableComposition
, удаляющий наблюдения, но сохраняющий узлы на месте. Деактивированную композицию можно активировать снова, вызвавsetContent
. ( Ib7f31 ) - Добавьте интерфейс
ReusableComposition
для управления жизненным циклом и повторного использования подкомпозиций. ( I812d1 , б/252846775 )
Версия 1.6.0-альфа03
9 августа 2023 г.
Выпущен androidx.compose.runtime:runtime-*:1.6.0-alpha03
. Версия 1.6.0-alpha03 содержит эти коммиты.
Исправления ошибок
- Исправлена новая оптимизация
CompositionLocalProvider
( 3118e88 ). - Исправьте, как разбираются подвижные узлы контента. ( 5e3d59b )
Версия 1.6.0-альфа02
26 июля 2023 г.
Выпущен androidx.compose.runtime:runtime-*:1.6.0-alpha02
. Версия 1.6.0-alpha02 содержит эти коммиты.
Новые функции и улучшения производительности
- Оптимизировать
rememberSaveable
( f01d79 ) - Отложить повторное чтение производных состояний до тех пор, пока не будут записаны изменения ( f38099 ).
- Улучшено предоставление локальных значений композиции ( a337ea ).
-
SideEffect
помечен как@ExplicitGroupsComposable
чтобы избежать создания группы. ( I74815 ) - Избегайте сравнения составов локальных карт при повторном использовании ( 782071 ).
Изменения API
- Добавлена специальная перегрузка для
CompositionLocalProviders
, которая позволяет избежать накладных расходов, используемых для ускорения предоставления нескольких значений, но приводит к накладным расходам при предоставлении одного значения. ( I6d640 , б/288169379 )
Исправления ошибок
- Исправлена утечка памяти таблицы слотов ( 73fcfe ).
- Исправлено то, как мы восстанавливаем
rememberSaveable
когдаstateSaver
возвращает значение null ( 90748c ).
Версия 1.6.0-альфа01
21 июня 2023 г.
Выпущен androidx.compose.runtime:runtime-*:1.6.0-alpha01
. Версия 1.6.0-alpha01 содержит эти коммиты.
Исправления ошибок
- Пропустить рекомпозицию подкомпозиций, которые будут удалены. ( Ieeb99 , б / 254645321 )
- Уменьшены выделения при применении снимков. ( I65c09 )
- Избегайте вычисления
readableHash
вDerivedState
, если снимок не был изменен ( 68c565 ).
Версия 1.5
Версия 1.5.4
18 октября 2023 г.
Выпущен androidx.compose.runtime:runtime-*:1.5.4
. Версия 1.5.4 содержит эти коммиты.
Версия 1.5.3
4 октября 2023 г.
Выпущен androidx.compose.runtime:runtime-*:1.5.3
. Версия 1.5.3 содержит эти коммиты.
Версия 1.5.2
27 сентября 2023 г.
Выпущен androidx.compose.runtime:runtime-*:1.5.2
. Версия 1.5.2 содержит эти коммиты.
Версия 1.5.1
6 сентября 2023 г.
Выпущен androidx.compose.runtime:runtime-*:1.5.1
. Версия 1.5.1 содержит эти коммиты.
Версия 1.5.0
9 августа 2023 г.
Выпущен androidx.compose.runtime:runtime-*:1.5.0
. Версия 1.5.0 содержит эти коммиты.
Изменения API
- Удалены выделения при рекомпозиции, цветовой анимации и
AndroidComposeView
. ( Ib2bfa ) - Добавлена аннотация
@StateFactoryMarker
для обозначения функций, которые создают состояния и должны быть обернуты вызовомremember
. ( I64550 ) - Добавьте примитивные версии State и
MutableState
( fb3d89 ) - Добавлен
Snapshot.isApplyObserverNotificationPending
( I672a5 ). - Добавлены примитивные версии
State
API, позволяющие отслеживать значения Int, Long, Float и Double в объектахState
без штрафов за автобоксинг. Используйте новые фабричные методыmutableIntState(Int)
,mutableFloatStateOf(Float)
и т. д., чтобы использовать их. ( I48e43 )
Исправления ошибок
- Пропустить рекомпозицию подкомпозиций, которые будут удалены. ( Ieeb99 , б / 254645321 )
- Не сохранять ссылку на снимок в
ComposerImpl
( 0206f7 ). - Не наносите состав дважды ( f5791b )
- Обеспечить недействительность неинициализированных значений производного состояния ( aa2a92 ).
- Вызовите
onEndChanges
во время удаления композиции. ( 62cc8c ) - Исправлено перемещение контента в подкомпозицию ( 4beb41 ).
- Исправить потенциальные взаимоблокировки ( c1a425 и 8edce0 )
- Рекомпозер, созданный для окна Android, теперь будет блокировать только вызовы
withFrameNanos
, а не всю композицию, когда он получает уведомление ON_STOP. Это означает, что окна, связанные с остановленными действиями, будут продолжать перекомпоновываться при изменении данных, но анимация или любой другой вызывающий объектwithFrameNanos
будет блокироваться. ( Id9e7f , б/240975572 ) - Выполните обратные вызовы деактивации для
LayoutNode
перед удалением эффектов 3784073 - Исправлены измененные флаги для перезапущенных лямбда-выражений ea81df9.
- Исправлена регрессия живого редактирования для Composable с узлами 73fd4d8.
- ON_STOP должен приостанавливать передачу кадров вместо композиции ae276f1.
- Недействительные области
SnapshotStateObserver
для неизмененных производных состояний 84d9b1c - Исправлена возможная тупиковая ситуация при удалении композиций 28761fc.
- Исправлено перемещение контента в подкомпозицию 92d4156.
- Исправить измененные флаги для перезапущенных лямбда-выражений ( 8a03e9 ).
- Выполнить обратные вызовы деактивации для
LayoutNode
перед удалением эффектов ( 8b0fa4 ). - Исправлена
endToMarker()
при завершении группы узлов. ( d71d980 ) - Использовать текущую группу
SlotWriter
для проверки деактивации ( a0b518b ) - Удалите
fill
вSlotTable.moveSlotGapTo()
и переместите ее на закрытие ( 81f9935 ). - Исправление отсутствующих аннулаций при перемещении подвижного контента ( 1d7c024 ).
- Исправить немедленную недействительность перемещенного подвижного содержимого ( 8676618 ).
Улучшения производительности
- Избегайте вычисления
readableHash
вDerivedState
, если снимок не был изменен. ( 307102 ) - Сокращенные выделения ( I65c09 , d7ea77 , 727974 и 445808 ).
- Быстрая отмена создания
CoroutineScopes
( a55362 и bd382f ) - Перезаписать записи объектов состояния недоступными записями состояния ( c986960 )
- Используйте композитор правильной области действия при реализации групп ( 9a5e5b6 ).
- Используйте
IdentityArraySet
для хранения недействительных снимков ( 7f60cca ). - Уменьшить выделение для наблюдений моментальных снимков ( 5bc535f )
Версия 1.5.0-rc01
26 июля 2023 г.
Выпущен androidx.compose.runtime:runtime-*:1.5.0-rc01
. Версия 1.5.0-rc01 содержит эти коммиты.
Исправления ошибок
Отложить повторное чтение производных состояний до тех пор, пока не будут записаны изменения ( f38099 ).
Доступна дополнительная проверка, рекомендующая перенести вызовы
mutableStateOf()
в соответствующие им специализированные типы для примитивов. Его идентификатор lint —AutoboxingStateCreation
. Ранее эта проверка была включена по умолчанию для всех проектов. Чтобы увидеть это предупреждение в редакторе Android Studio и в результатах lint вашего проекта, измените его серьезность с информационного на предупреждение (или выше), объявивwarning "AutoboxingStateCreation"
внутри конфигурации вашего модуля build.gradle или build.gradle.kts, как показано ( I34f7e ):android { lint { warning "AutoboxingStateCreation" } ... }
Версия 1.5.0-бета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, позволяющие обрабатывать исключения во время композиции.
- Обработка ошибок композиции при горячей перезагрузке
- Обработка ошибок живого редактирования при сохранении/восстановлении
Трассировка композиции
- API-интерфейсы трассировки во время выполнения были добавлены для поддержки новых инструментов трассировки композиции.
- Генерация составных вызовов начала/завершения событий трассировки
- Повторно добавлен ComposerKt.traceEventStart(Int, String)
Составные API-интерфейсы отражения
- Был добавлен новый API
ComposableMethod
, обеспечивающий более надежные вызовы составных API на основе отражения. - Переместите ignoreComposable для создания среды выполнения.
- Переработать API для вызова составного метода.
Исправления во время выполнения
- Исправлен ошибочный тест диапазона для проверки таблицы слотов для маркеров.
- Разрешить перемещение подвижного содержимого в SubcomposeLayout и из него.
- Исправлено перемещение содержимого в новое содержимое подкомпозиции.
Система моментальных снимков
- Система моментальных снимков получила различные улучшения в области управления памятью, производительности и правильности.
- Оптимизация удаления области в SnapshotStateObserver.
- Удалить вложенные снимки, созданные на основе прозрачных снимков.
- Исправлено состояние гонки при чтении состояния из глобального снимка.
- Поддержка DerivedState в SnapshotStateObserver
- Запретить удаление производного состояния из композиции при его чтении в других областях.
- Используйте IdentityArrayMap вместо HashMap внутри DerivedState
- Обновите наблюдатели производного состояния, чтобы использовать изменяемый вектор.
- Обновление очистки состояния SnapshotStateObserver
- Замените SnapshotStateObserver.invalidated на ArraySet.
- Исправлено состояние гонки при чтении состояния из глобального снимка.
- Исправлено использование устаревшей записи в расчете хеша DerivedState.
- Исправлено состояние гонки при перемещении глобального снимка.
- Ускорьте очистку наблюдений области в SnapshotStateObserver.
Версия 1.3.0-rc01
5 октября 2022 г.
Выпущен androidx.compose.runtime:runtime-*:1.3.0-rc01
. Версия 1.3.0-rc01 содержит эти коммиты.
Исправления ошибок
- Исправлено
ArrayIndexOutOfBoundsException
, возникающее из таблицы слотов ( b/249076084 ).
Версия 1.3.0-beta03
21 сентября 2022 г.
Выпущен androidx.compose.runtime:runtime-*:1.3.0-beta03
. Версия 1.3.0-beta03 содержит эти коммиты.
Изменение поведения
- Параметр, который необходимо
remember
, иrememberCoroutineScope
изменен наcrossinline
. Это приведет к сообщению об ошибке при раннем возврате вместо разрешения раннего возврата, что приведет к сообщению о более поздней внутренней ошибке. - Это изменение потенциально может привести к появлению новых ошибок компилятора, требующих удаления нелокальных возвратов из лямбда-выражений, передаваемых этим функциям. ( Ибеа62 )
Версия 1.3.0-beta02
7 сентября 2022 г.
Выпущен androidx.compose.runtime:runtime-*:1.3.0-beta02
. Версия 1.3.0-beta02 содержит эти коммиты.
Исправления ошибок
- Обновлен API ( I64ca0 )
Версия 1.3.0-бета01
24 августа 2022 г.
Выпущен androidx.compose.runtime:runtime-*:1.3.0-beta01
. Версия 1.3.0-beta01 содержит эти коммиты.
Изменения API
- В
CompositionData
был добавлен методfind
, позволяющий инструментам разработчика, использующим этот API, быстро находить подгруппу композиции по ее идентификатору. ( I5794f )
Версия 1.3.0-альфа03
10 августа 2022 г.
Выпущен androidx.compose.runtime:runtime-*:1.3.0-alpha03
. Версия 1.3.0-alpha03 содержит эти коммиты.
Версия 1.3.0-альфа02
27 июля 2022 г.
Выпущен androidx.compose.runtime:runtime-*:1.3.0-alpha02
. Версия 1.3.0-alpha02 содержит эти коммиты.
Изменения API
- Повторно добавлен
ComposerKt.traceEventStart(Int, String)
для обратной совместимости ( I6e6de ).
Версия 1.3.0-альфа01
29 июня 2022 г.
Выпущен androidx.compose.runtime:runtime-*:1.3.0-alpha01
. Версия 1.3.0-alpha01 содержит эти коммиты.
Изменения API
- Перенос функциональности утилиты во время выполнения ( I4f729 )
Версия 1.2
Версия 1.2.1
10 августа 2022 г.
Выпущен androidx.compose.runtime:runtime-*:1.2.1
. Версия 1.2.1 содержит эти коммиты.
Исправления ошибок
- Исправлена утечка памяти: удаляйте вложенные снимки, созданные из прозрачных снимков b/239603305.
Версия 1.2.0
27 июля 2022 г.
Выпущен androidx.compose.runtime:runtime-*:1.2.0
. Версия 1.2.0 содержит эти коммиты.
Важные изменения с 1.1.0
В Compose Runtime появилось несколько функций, представленных в версии 1.2.0, а также множество исправлений ошибок, стабилизирующих работу. Наиболее важной новой функцией стало введение API
movableContentOf
, который можно использовать для включения сложного пользовательского интерфейса, такого как переходы общих элементов. APImovableContentOf
преобразует составную лямбду в лямбду, которая перемещает ее состояние и соответствующие узлы в любое новое место, которое она вызывает. Когда предыдущий вызов покидает композицию, состояние временно сохраняется, и если новый вызов Lambda входит в композицию, то штат и связанные узлы перемещаются в место нового вызова. Если новый вызов не добавляется, состояние удаляется навсегда, и помните, что наблюдатели уведомляются.Если в одном и том же композиции называется
movableContentOf
несколько раз, для каждого вызова создается новое состояние и узлы, и, когда вызовы оставляют композицию и новые вызовы вводится, состояние перемещается из первых вызовов на въезды в заказе. они называются. Все государство не заявлено новыми вызовами, удаляется навсегда.В дополнение к этому и нескольким другим новым функциям было потрачено много времени, стабилизируя систему выполнения и состояния моментальных снимков. Различные утечки памяти были удалены и оптимизировали пути кода.
Суммированный список изменений можно найти ниже:
Новые функции в 1.2
- Добавить экспериментальный снимок небезопасно/уйти
- Добавить Snapshot.ascontextElement Экспериментальный API
- Введите Snapshot.withoutreadoBservation
- Позвольте состоянию двигаться в рамках композиции
- Отслеживание переобожений в составлении
Производительность в 1.2
- Повышение композиции локальной производительности
- Базовые профили для сочинения должны быть получены с использованием контрольных показателей
Исправления ошибок в 1.2
- Удалить информацию о отслеживании из выпуска Recompose Scopes
- Предотвратить удаление производного состояния от композиции, когда оно читается в других областях
- Используйте более эффективное removeScope () в SnapshotStateBserver
- Очистка зависимости от полученных состояний в композиции
- Исправить CurrentCompositeKeyHash, изменение после внутреннего переоборудования внутри подвижного содержания
- Очистите недействительные композиции во время утилизации
- Исправление прочтения состояния во время переоборудования
- Исправить утечку памяти при наблюдении
- Фиксированный композитный хэш -ключ для модулевых сборов, чтобы быть последовательным
- Исправить угол корпуса, когда композитор будет сбой
- Обеспечить принудительное признание групповых сил переоборудования
- Исправьте ошибку, когда вспомнить, что ввод, восстанавливается в неправильном порядке.
Версия 1.2.0-RC03
29 июня 2022 г.
androidx.compose.runtime:runtime-*:1.2.0-rc03
выпускается. Версия 1.2.0-RC03 содержит эти коммиты.
Исправления ошибок
- Полученные наблюдения состояния ранее были безусловно удалены из рекомплексного масштаба и композиции вместе, которые нарушали другие области, которые все еще могут наблюдать за производным состоянием. Это изменение удаляет полученные экземпляры состояния только в том случае, если оно больше не наблюдается другими областями. ( B/236618362 )
Версия 1.2.0-RC02
22 июня 2022 года
androidx.compose.runtime:runtime-*:1.2.0-rc02
выпускается. Версия 1.2.0-RC02 содержит эти коммиты.
Версия 1.2.0-rc01
15 июня 2022 г.
androidx.compose.runtime:runtime-*:1.2.0-rc01
выпущен. Версия 1.2.0-rc01 содержит эти коммиты.
Изменения API
- Интерфейсы в библиотеках Compose теперь созданы с использованием методов интерфейса JDK8 по умолчанию ( I5BCF1 )
Версия 1.2.0-бета03
1 июня 2022 г.
androidx.compose.runtime:runtime-*:1.2.0-beta03
выпускается. Версия 1.2.0-бета03 содержит эти коммиты.
Версия 1.2.0-бета02
18 мая 2022 г.
androidx.compose.runtime:runtime-*:1.2.0-beta02
выпускается. Версия 1.2.0-бета02 содержит эти коммиты.
Версия 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 ) - Добавлен экспериментальный
Snapshot.asContextElement()
. - Аннотация и аннотации
@ComposableTarget
и аннотации, помеченные@ComposableTargetMarker
теперь могут использоваться в прицеле файла с помощью префикса@file
. Использование целевой аннотации в прицеле файла приведет к тому, что компилятор предполагает, что все композиционные функции в файле предназначены для того, чтобы быть нацеленным на связанный приложение. Например, использование@file:UiComposable
заявляет, что все функции@Composable
нацелены на Compose UI Applier. Функция, которая должна ориентироваться на другого приложения, должна явно предоставить аннотацию целевого маркера для желаемого приложения. ( I40804 )
Версия 1.2.0-Alpha08
20 апреля 2022 года
androidx.compose.runtime:runtime-*:1.2.0-alpha08
выпускается. Версия 1.2.0-Alpha08 содержит эти коммиты.
Изменения API
- Добавлено
TracingInProgress
к интерфейсуCompositionTracer
. ( IC6F12 ) - Добавить
recomposeScopeIdentity
в композитор ( I0C873 ) - Ограниченное отслеживание API (Composer.SetTracer) для
OptIn(InternalComposeTracingApi)
. ( I9187f ) - Добавлен
ResuableContentHost
, который позволяет лучше контролировать государственное время жизни, созданное для многократного использования контента. Например, если субкомпозиция временно не используется, то содержание может быть деактивировано, что приводит к тому, что все запоминающиеся состояния в композиции будет забыт, например, все одноразовые эффекты. ( I2c0f2 , b/220322704 )
Версия 1.2.0-Alpha07
6 апреля 2022 г.
androidx.compose.runtime:runtime-*:1.2.0-alpha07
выпускается. Версия 1.2.0-Alpha07 содержит эти коммиты.
Изменения API
- Новая функция
Snapshot.withoutReadObservation { ... }
был добавлен. Это позволяет пользователям запускать пропущенную Lambda, не подписываясь на изменения значений состояния, прочитанных в этом блоке. Вы можете найти его полезным в использовании, когда вы хотите извлечь выгоду из поток на основе снимка безопасной записи/чтения, но хотите иметь возможность читать значение, не вызывая ненужного переоборудования или переработки. ( I9f365 , b/214054486 )
Версия 1.2.0-Alpha06
23 марта 2022 г.
androidx.compose.runtime:runtime-*:1.2.0-alpha06
выпускается. Версия 1.2.0-Alpha06 содержит эти коммиты.
Версия 1.2.0-Alpha05
9 марта 2022 г.
androidx.compose.runtime:runtime-*:1.2.0-alpha05
выпускается. Версия 1.2.0-Alpha05 содержит эти коммиты.
Внешний вклад
- Обновлено для использования Cotlinx Coroutines 1.6.0 ( i3366d )
Версия 1.2.0-Alpha04
23 февраля 2022 г.
androidx.compose.runtime:runtime-*:1.2.0-alpha04
выпускается. Версия 1.2.0-Alpha04 содержит эти коммиты.
Изменения API
Добавлен
ComposableTarget
,ComposableTargetMarker
иComposableOpenTarget
, которые позволяют отчетность по времени компиляции, когда композиционная функция называется нацеленным на приложение, которое он не предназначен для использования.В большинстве случаев аннотации могут быть выведены с помощью плагина компилятора Compose, поэтому использование этих аннотаций непосредственно должно быть редким. Случаи, которые нельзя вывести, включают создание и использование пользовательских прикладных, абстрактных композиционных функций (таких как методы интерфейса), поля или глобальные переменные, которые являются композиционными лямбдами (выводится локальные переменные и параметры), или при использовании
ComposeNode
или связанных композиционных функций .Для пользовательских приложений композиционные функции, которые вызывает
ComposeNode
илиReusableComposeNode
необходимо добавить аннотациюCompoableTarget
для функции и любые типы параметров композиции Lambda. Однако рекомендуется создать аннотацию, которая аннотирована с помощьюComposableTargetMarker
, а затем отмеченная аннотация вместоComposableTarget
напрямую. Компонируемая аннотация, помеченнаяComposableTargetMarker
эквивалентнаComposbleTarget
с полностью квалифицированным именем класса атрибутов в качестве параметра приложения. Для примера использованияComposableTargetMarker
см.anroidx.compose.ui.UiComposable
. ( I38f11 )
Версия 1.2.0-Alpha03
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-Alpha02
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-Alpha06
13 октября 2021 г.
androidx.compose.runtime:runtime-*:1.1.0-alpha06
выпускается. Версия 1.1.0-Alpha06 содержит эти коммиты.
Изменения API
- Удален
InternalCompilerApi
из методов композитора, которые необходимо назвать кросс-модулем ( I1AA0B ) -
Recomposer.state
был устарел и замененRecomposer.currentState
, чтобы изменить свой тип на Stateflow ( IC2AB3 , B/197773820 )
Версия 1.1.0-альфа05
29 сентября 2021 г.
androidx.compose.runtime:runtime-*:1.1.0-alpha05
выпускается. Версия 1.1.0-Alpha05 содержит эти коммиты.
Версия 1.1.0-Alpha04
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
чтобы зависеть от Kotlin1.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 и AGP7.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.compes.material
- Androidx.compes.material-Ripple
- Androidx.compose.runtime
- Androidx.compose.ui
- Androidx.compose.ui.geometry
- Androidx.compose.ui.graphics
- Androidx.compose.ui.text
- Androidx.compose.ui.text
- Androidx.compose.ui.unit
- Androidx.compose.ui.util
Что такое правила профиля?
Правила профиля для библиотеки указываются в текстовом файле
baseline-prof.txt
расположенном в каталогеsrc/main
или эквивалент. Файл указывает правило на строку, где правило в этом случае является шаблоном для сопоставления методов или классов в библиотеке. Синтаксис для этих правил является суперсетом формата профиля искусства, читаемого на человеку, который используется при использованииadb shell profman --dump-classes-and-methods ...
Эти правила принимают одну из двух форм для нацеливания на методы или классы.Правило метода будет иметь следующую шаблон:
<FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
И правило класса будет иметь следующий шаблон:
<CLASS_DESCRIPTOR>
Здесь
<FLAGS>
это один или несколько символовH
,S
иP
, чтобы указать, следует ли пометить этот метод как «горячий», «стартап» или «Post Startup».<CLASS_DESCRIPTOR>
является дескриптором для класса, которому принадлежит целевой метод. Например, классandroidx.compose.runtime.SlotTable
будет иметь дескрипторLandroidx/compose/runtime/SlotTable;
.<METHOD_SIGNATURE>
является подписью метода и включает имя, типы параметров и типы возврата метода. Например, методfun isPlaced(): Boolean
наLayoutNode
имеет подписьisPlaced()Z
.Эти шаблоны могут иметь подстановочные знаки (
**
,*
и?
), Чтобы иметь единое правило, охватывать несколько методов или классов.
Что делают правила?
Метод, который имеет флаг
H
указывает, что этот метод является «горячим» методом и должен быть скомпилирован заранее.Метод, который имеет флаг
S
на то, что это метод, который вызывается при запуске, и должен быть скомпилирован заранее, чтобы избежать стоимости компиляции и интерпретации метода во время запуска.Метод, который имеет флаг
P
указывает, что это метод, который называется после запуска.Класс, который присутствует в этом файле, указывает на то, что он используется во время запуска и должен быть предварительно выделен в куче, чтобы избежать стоимости загрузки класса.
Как это работает?
- Библиотеки могут определить эти правила, которые будут упакованы в артефакты AAR. Когда приложение затем строится, которое включает эти артефакты, эти правила объединяются вместе, и объединенные правила используются для создания компактного бинарного профиля искусства, характерного для приложения. Искусство может затем использовать этот профиль, когда приложение установлено на устройствах, чтобы заранее собрать конкретное подмножество приложения для повышения производительности приложения, особенно первого запуска. Обратите внимание, что это не повлияет на отказываемые приложения.
Версия 1.0.0-бета08
2 июня 2021 года
androidx.compose.runtime:runtime-*:1.0.0-beta08
выпускается. Версия 1.0.0-BETA08 содержит эти коммиты.
Изменения API
-
State<T>
теперьState<out T>
( i69049 ) -
ControlledComposition
API изменение, чтобы позволить переоборудовать изменения в однокомпонентном отдельном проходе. ( IAAFD1 , B/184173932 )
Версия 1.0.0-бета07
18 мая 2021 г.
androidx.compose.runtime:runtime-*:1.0.0-beta07
выпускается. Версия 1.0.0-BETA07 содержит эти коммиты.
Изменения API
- Добавлены новые API компилятора, которые позволяют удалить информацию, сгенерированную компилятором, во время минификации источника. ( IA34E6 )
Представляет
ReusableContent
, который попытается повторно использовать узлы в его содержании вместо того, чтобы заменить их при изменении ключа. Когда ключ изменяется, предыдущие значения в таблице слотов для содержания игнорируются, за исключением сгенерированных узлов, и значения, используемые для обновления узлов.Представляет
ReusableComposeNode
, который повторно использует испускаемый узел вместо его замены, как это сделано дляComposeNode
. ( I1dd86 )@ComposeCompilerApi
больше не@RequiresOptIn
( IAB690 )
Исправления ошибок
- Lazycolumn/Row теперь будет продолжать работать до 2 ранее видимых предметов (не утилизируется), даже если они уже прокручиваются. Это позволяет компоненту повторно использовать активные подкомпозиции, когда нам нужно будет составить новый элемент, который улучшает производительность прокрутки. ( IE5555 )
Версия 1.0.0-бета06
5 мая 2021 г.
androidx.compose.runtime:runtime-*:1.0.0-beta06
выпускается. Версия 1.0.0-BETA06 содержит эти коммиты.
Изменения API
-
@ComposeCompilerApi
больше не@RequiresOptIn
( IAB690 )
Версия 1.0.0-бета05
21 апреля 2021 года
androidx.compose.runtime:runtime-*:1.0.0-beta05
выпускается. Версия 1.0.0-beta05 содержит эти коммиты.
Изменения API
- Удален
@InternalComposeApi
для записи снимков и записи снимка ( ID134D )
Исправления ошибок
- Файлы AndroidManifest из UI-test-Manifest и UI-Tooling-Data в настоящее время совместимы с Android 12 ( i6f9de , b/184718994 )
Версия 1.0.0-beta04
7 апреля 2021 г.
androidx.compose.runtime:runtime-*:1.0.0-beta04
выпускается. Версия 1.0.0-beta04 содержит эти коммиты.
Исправления ошибок
Перед этим изменением локальные композиционные функции были пропускаются на основе их параметров. После этого изменения никакие локальные композиционные функции не пропускают. Это изменение осуществляется, потому что оно является обычным и ожидается, что локальные функции снимают параметры от родителя, а их пропуск является общим источником ошибок.
Подводя итог, рассмотрите пример:
@Composable fun Counter(count: Int, onCountChange: (Int) -> Unit) { @Composable fun ShowCount() { Text("Count: $count") } ShowCount() Button(onClick={ onCountChange(count + 1) }) { Text("Increment") } }
До этого изменения функция композиции
ShowCount
всегда будет пропускать, даже после обновления параметраcount
. Это уже не так. ( I5648a )Исправлена проблема, когда
rememberSaveable()
восстанавливал старое значение при использовании с входными параметрами ( I1B110 , B/182403380 )
Версия 1.0.0-бета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-Alpha12
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-Alpha10
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 )
- The native keyEvent can now be accessed through keyEvent.nativeKeyEvent ( I87c57 , b/173086397 )
Version 1.0.0-alpha09
December 16, 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha09
is released. Version 1.0.0-alpha09 contains these commits.
Изменения API
Removed SlotTable, SlotReader and SlotWriter from the public API. These were marked as InternalComposeAPI previously. Now they are internal to the compose module.
CompositionData and CompositionGroup were added as a replacement for the ui-tooling API to use to extract composition information. These are public but are not intended for use outside the ui-tooling API as they provide the raw information the ui-tooling API interprets ( I31a9c )
The Applier class is no longer considered an ( Id85b0 )
The
Applier
interface has changed to simplify building trees bottom-up instead of top-down.The
insert()
method has been renamed toinsertTopDown()
.A new method,
insertBottomUp()
, was added.An applier either inserts nodes into the tree it is editing using
insertTopDown()
orinsertBottomUp()
depending on which performs better.Some trees, such as
LayoutNode
andView
, are much more efficient to build bottom-up than top-down. Prior to this change, a stack of inserts was required to implement bottom-up which needed to be copied to every applier which needed bottom-up construction for performance. With this change anApplier
overridesinsertBottomUp()
to build a tree bottom-up andinsertTopDown()
to build the tree top-down. ( Icbdc2 )Compose supports property getters that can make composable invocations. Support for this is not going away, but the syntax for declaring a property getter as being @Composable is changing.
The now-deprecated syntax for doing this was by annotating the property itself:
@Composable val someProperty: Int get() = ...
The now-correct syntax for doing this is by annotating the getter of the property:
val someProperty: Int @Composable get() = ...
Both syntaxes will work for some time, but the former deprecated syntax will eventually become a compile error. ( Id9197 )
Исправления ошибок
- AndroidOwner made internal ( Ibcad0 , b/170296980 )
- subcomposeInto(LayoutNode) was made internal ( Id724a )
Version 1.0.0-alpha08
December 2, 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha08
is released. Version 1.0.0-alpha08 contains these commits.
Изменения API
- Added lint check for composable lambda parameter naming and position, to check for consistency with Compose guidelines. Also migrated some APIs using
children
as the name for their trailing lambda tocontent
, according to the lint check and guidance. ( Iec48e ) - Recomposer no longer accepts an EmbeddingContext; required scheduling dependencies are obtained from the effectCoroutineContext. FrameManager is deprecated; platform integrations should initialize their own global snapshot handling. ( I02369 )
- RestorableStateHolder.withRestorableState function was renamed to RestorableStateProvider ( I66640 )
Исправления ошибок
- Deprecated Ambients named with
Ambient
as their suffix, and replaced them with new properties prefixed with Ambient, following other Ambients and Compose API guidelines. ( I33440 ) - Remove old ui-test module and its stubs ( I3a7cb )
Version 1.0.0-alpha07
11 ноября 2020 г.
androidx.compose.runtime:runtime-*:1.0.0-alpha07
is released. Version 1.0.0-alpha07 contains these commits.
Новые возможности
Изменения API
- The
@UnionType
annotation has been deprecated ( I57cde ) - provideDefault was added as an alternative to provide for providing ambients, and it can be used to specify ambient values that will only be set when there is no ambient value already provided. ( Id6635 , b/171024925 )
- LaunchedTask was renamed to LaunchedEffect for consistency with the SideEffect and DisposableEffect APIs. LaunchedEffect with no subject params is not permitted in order to encourage best practices. ( Ifd3d4 )
- Applier now has onBeginChanges/onEndChanges callbacks that are invoked when a Composer begins/is finished applying changes to the tree. These may be used for batching resource management if needed. ( Icf476 )
- Recomposer now requires a CoroutineContext at construction ( Ic4610 )
- Changes to the internal SlotTable implementation which should not affect the public API. ( If9828 )
- Deprecated rxjava2 adapters which does not take the initial value were removed ( Idb72f )
Исправления ошибок
- foundation.Text has been deprecated and replaced with material.Text. For a basic, unopinionated text API that does not consume values from a theme, see androidx.compose.foundation.BasicText. ( If64cb )
- BaseTextField has been deprecated. Use BasicTextField instead. ( I896eb )
- Several layout related symbols were moved from androidx.compose.ui to androidx.compose.layout.ui. ( I0fa98 , b/170475424 )
Внешний вклад
- Added
runtime-rxjava3
module for compose. Similar toruntime-rxjava2
( I02cbf )
Version 1.0.0-alpha06
28 октября 2020 г.
androidx.compose.runtime:runtime-*:1.0.0-alpha06
is released. Version 1.0.0-alpha06 contains these commits.
Изменения API
- Recomposer is now a CompositionReference and a valid composition parent. Explicit Recomposer is now required in fewer places. ( I4036f )
- Added DisposableEffect counterpart API to SideEffect, filling the role of onCommit-with-params but with a required onDispose.
- Added rememberUpdatedState API to publish data from recomposition to ongoing or long-lived processes such as DisposableEffects or LaunchedTasks.
- ( Id50b9 )
- MutableVector now implements RandomAccess ( I85d73 , b/170461551 )
- Added SideEffect composable for applying side effects of composition to objects managed by the composition. SideEffect is intended to replace the onCommit composable. ( Ia77c2 )
- New experimental api RestorableStateHolder. It allows to save the state defined with [savedInstanceState] and [rememberSavedInstanceState] for the subtree before disposing it to make it possible to compose it back next time with the restored state. ( I66884 , b/166586419 )
Исправления ошибок
- Enable transitions in ComposeTestRule; remove option to enable the blinking cursor from ComposeTestRule. ( If0de3 )
Версия 1.0.0-альфа05
14 октября 2020 г.
androidx.compose.runtime:runtime-*:1.0.0-alpha05
is released. Версия 1.0.0-alpha05 содержит эти коммиты.
Изменения API
- Experimental Modifier.pointerInput suspending input modifier ( Ia77d2 )
- The scrolling performance of LazyColumn/Row is improved by doing less work in subcomposition on every scroll. The new hasInvalidations() method was added for Composition class. hasPendingChanges() method from Recomposer was renamed to hasInvalidations() ( Ib2f32 , b/168293643 , b/167972292 , b/165028371 )
- Add produceState API for launching coroutines from composition that update a single
State<T>
value over time ( Id4a57 ) - launchInComposition renamed to LaunchedTask to match Compose API guidelines ( I99a8e )
- The order of place() calls in custom Layouts now defines the drawing order for the children ( Ibc9f6 )
Версия 1.0.0-альфа04
October 1, 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha04
is released. Версия 1.0.0-alpha04 содержит эти коммиты.
Изменения API
- Added OwnerScope to allow collection of layout and drawing observation scopes once they are no longer valid. ( Ic4cf8 )
- Added derivedStateOf API to create State objects based on a calculation which may read (and derive from) other State objects ( If758b )
- Added TestOnly API for SnapshotStateObserver ( I6e2a9 )
Исправления ошибок
- foundation.Box was deprecated. Please use foundation.layout.Box instead. ( Ie5950 , b/167680279 )
Версия 1.0.0-альфа03
16 сентября 2020 г.
androidx.compose.runtime:runtime-*:1.0.0-alpha03
is released. Версия 1.0.0-alpha03 содержит эти коммиты.
Изменения API
-
CompositionCoroutineScope
no longer implementsMonotonicFrameClock
. Callers ofwithFrameNanos
should import the top-level function explicitly. ( Icb642 , b/166778123 )
Исправления ошибок
- Global testing functions such as
onNode
orwaitForIdle
are now deprecated, please migrate to their new counterparts that are defined on ComposeTestRule ( I7f45a ) -
launchInComposition
no longer launches coroutines undispatched ( Ief6af , b/166486000 )
Версия 1.0.0-альфа02
September 2, 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha02
is released. Версия 1.0.0-alpha02 содержит эти коммиты.
Изменения API
- Add
snapshotFlow
andwithMutableSnapshot
APIs for consuming and producing Snapshot data changes. ( I3e722 ) The calling convention for composable functions has changed. This is a binary breaking change. All libraries must be recompiled to work with this version of the compose compiler plugin.
This change does not create a source level breaking change as the only APIs that have changed are compiler APIs that have an explicit opt in. ( I7afd2 , b/158123185 )
Removed scheduling methods from EmbeddingContext ( I7b9be )
onPreCommit is deprecated; onCommit now has onPreCommit's behavior.
onCommit and onActive now run in the same choreographer frame that the composition changes committed in rather than at the beginning of the next choreographer frame. ( I70403 )
Версия 1.0.0-альфа01
26 августа 2020 г.
androidx.compose.runtime:runtime-*:1.0.0-alpha01
is released. Версия 1.0.0-alpha01 содержит эти коммиты.
Version 0.1.0-dev
Version 0.1.0-dev17
19 августа 2020 г.
androidx.compose.runtime:runtime-*:0.1.0-dev17
is released. Version 0.1.0-dev17 contains these commits.
Изменения API
- Custom emits can now declare that one or more of its setters can be skipped and recomposed independently of the emit. ( Ibbd13 )
Removed deprecated FrameManager calls.
Internal compose APIs have been changed to reduce the amount of overhead to track state objects such as
mutableStateof()
( I80ba6 )The
state { ... }
composable is now deprecated in favor of explicit calls toremember { mutableStateOf(...) }
for clarity. This reduces the overall API surface and number of concepts for state management, and matches theby mutableStateOf()
pattern for class property delegation. ( Ia5727 )Flow.collectAsState now determines the default dispatcher from the composition itself rather than defaulting to Dispatchers.Main. ( I9c1d9 )
Crash when something which saves the state was used inside the for loop is fixed. Now having the same key in savedInstanceState() is allowed, api of UiSavedStateRegistry is now adjusted to this new requirement ( I4ab76 , b/160042650 , b/156853976 , b/159026663 , b/154920561 )
Исправления ошибок
-
emitView
was deprecated. UseAndroidView
instead if possible for emitting Views inside Compose. Note that composing Views and ViewGroups directly will not be supported in the future unless these are leaves in the composition tree, case when this can be achieved using AndroidView. ( I29b1e , b/163871221 )
Version 0.1.0-dev16
August 5, 2020
androidx.compose.runtime:runtime-*:0.1.0-dev16
is released. Version 0.1.0-dev16 contains these commits.
Изменения API
The default mutation policy of
mutableStateOf()
,ambientOf()
andsavedInstanceStateOf()
has changed to bestructuralEqualityPolicy()
instead ofreferentialEqualityPolicy()
.The default for deciding if a new value assigned to a
mutableStateOf()
instance is considered a change now defaults to using==
instead of using===
.See https://kotlinlang.org/docs/reference/equality.html
ambientOf()
andsavedInstanceStateOf()
usemutableStateOf()
in their implementations so they were changed to be consistent withmutableStateOf()
.Using structural equality more closely matches developer expectations.
Например,
val state = mutableStateOf(1f)
с последующим,
state.value = 1f
will no longer be consider a change to
state
and uses ofstate
during composition will no longer need to be recomposed.This is a breaking change but, in most cases (such when using classes that do not override
equals()
), this will not have a noticeable effect on an application.Classes that do override
equals()
, such asdata
classes, might see a performance degradation as theirequals()
methods are now, by default, called when assigned to amutableStateOf()
.The previous behavior can be restored by adding the policy parameter
policy = referentialEqualityPolicy()
to calls tomutableStateOf()
,ambientOf()
andsavedInstanceStateOf()
. ( Ic21a7 )Row
andColumn
are now inline function significantly reducing the overhead of using them. ( I75c10 )
Исправления ошибок
- setViewContent was deprecated. setContent should be used instead. ( I7e497 , b/160335130 )
Added MonotonicFrameAnimationClock that enables you to use a MonotonicFrameClock as an AnimationClockObservable to bridge the gap between the new coroutines based clocks and APIs that still use the old callback based clocks.
The MonotonicFrameClock equivalent of ManualAnimationClock is now ManualFrameClock. ( I111c7 , b/161247083 )
Modifier.stateDraggable was completely reworked and renamed to Modifier.swipeable. A new SwipeableState class was introduced, and DrawerState and BottomDrawerState were refactored to inherit from it. [Modal/Bottom]DrawerLayout no longer take an onStateChange parameter. ( I72332 , b/148023068 )
Modifier.plus has been deprecated, use Modifier.then instead. 'Then' has a stronger signal of ordering, while also prohibits to type
Modifier.padding().background() + anotherModifier
, which breaks the chain and harder to read ( Iedd58 , b/161529964 )SubcomposeLayout is added. It is a low level primitive which allows to compose the children during the measuring if we want to use some values available only later during the measure for the subtree composition. For example WithConstraints is not implemented using SubcomposeLayout. ( I25cc8 )
Material FilledTextField was renamed to TextField and foundational TextField was renamed to BaseTextField to make simplest desired API easy to discover and use ( Ia6242 , b/155482676 )
Modifier.drawBackground has been renamed to Modifier.background ( I13677 )
Version 0.1.0-dev15
22 июля 2020 г.
androidx.compose.runtime:runtime-*:0.1.0-dev15
is released. Version 0.1.0-dev15 contains these commits.
Dependencies Update
- To use the
0.1.0-dev15
version of Compose, you will need to update your dependencies according to the new code snippets shown above in Declaring dependencies .
Изменения API
@Model
annotation is now deprecated. Use state and mutableStateOf as alternatives. This deprecation decision was reached after much careful discussion.Обоснование
Rationale includes but is not limited to:
- Reduces API surface area and concepts we need to teach
- More closely aligns with other comparable toolkits (Swift UI, React, Flutter)
- Reversible decision. We can always bring
@Model
back later. - Removes corner-case usage and difficult to answer questions about configuring
@Model
as things we need to handle -
@Model
data classes, equals, hashcode, etc. - How do I have some properties “observed” and others not?
- How do I specify structural vs. referential equality to be used in observation?
- Reduces “magic” in the system. Would reduce the likelihood of someone assuming system was smarter than it is (ie, it knowing how to diff a list)
- Makes the granularity of observation more intuitive.
- Improves refactorability from variable -> property on class
- Potentially opens up possibilities to do hand-crafted State-specific optimizations
- More closely aligns with the rest of the ecosystem and reduces ambiguity towards immutable or us “embracing mutable state”
Migration Notes
Almost all existing usages of
@Model
are fairly trivially transformed in one of two ways. The example below has a@Model
class with two properties just for the sake of example, and has it being used in a composable.@Model class Position( var x: Int, var y: Int ) @Composable fun Example() { var p = remember { Position(0, 0) } PositionChanger( position=p, onXChange={ p.x = it } onYChange={ p.y = it } ) }
Alternative 1: Use
State<OriginalClass>
and create copies.This approach is made easier with Kotlin's data classes. Essentially, make all previously
var
properties intoval
properties of a data class, and then usestate
instead ofremember
, and assign the state value to cloned copies of the original using the data classcopy(...)
convenience method.It's important to note that this approach only works when the only mutations to that class were done in the same scope that the
State
instance is created. If the class is internally mutating itself outside of the scope of usage, and you are relying on the observation of that, then the next approach is the one you will want to use.data class Position( val x: Int, val y: Int ) @Composable fun Example() { var p by state { Position(0, 0) } PositionChanger( position=p, onXChange={ p = p.copy(x=it) } onYChange={ p = p.copy(y=it) } ) }
Alternative 2: Use mutableStateOf and property delegates
This approach is made easier with Kotlin's property delegates and the
mutableStateOf
API which allows you to create MutableState instances outside of composition. Essentially, replace allvar
properties of the original class withvar
properties withmutableStateOf
as their property delegate. This has the advantage that the usage of the class will not change at all, only the internal implementation of it. The behavior is not completely identical to the original example though, as each property is now observed/subscribed to individually, so the recompositions you see after this refactor could be more narrow (a good thing).class Position(x: Int, y: Int) { var x by mutableStateOf(x) var y by mutableStateOf(y) } // source of Example is identical to original @Composable fun Example() { var p = remember { Position(0, 0) } PositionChanger( position=p, onXChange={ p.x = it } onYChange={ p.y = it } ) }
( I409e8 , b/152050010 , b/146362815 , b/146342522 , b/143413369 , b/135715219 , b/143263925 , b/139653744 )
Changes the code generation strategy of Compose's compiler. Prior to the change, the compose compiler would transform calls to composable functions. With this change, we now transform the body of a composable function and leave the callsite unaltered (mostly).
This means that most of the logic communicating with the compose runtime happens at the start of the function body, instead of at the callsite.
This should be a source-compatible change for all usage of compose. Most users of compose should not have to update any code as a result of this change.
In order to support this work, the JVM signature of all composable functions has changed. A Composable function accepting a single parameter is transformed into a function accepting 3 parameters, the additional parameters are the Composer, a 'key' integer. a bitmask integer used to propagate metadata through calls.
Compose now also transforms default arguments to a composable function. It does this without introducing an additional synthetic default overload of the function itself, so this change will result in fewer functions being defined.
Known intentional behavioral changes resulting from this:
- Some calls will skip where they wouldn't have previously
- Composable expressions in default argument expressions are now correctly subscribed to and handled
This work included some optimizations: 1. The result of comparisons of parameters are propagated through the call graph to other composable functions. This will result in fewer comparisons at runtime, reduces the slot table size, as well as more skipping of composable functions that were previously not skipped 2. Paremeters which are determined to be “static” at compile time are no longer compared or stored in the время выполнения. This reduces the number of comparisons and reduces slot table size. 3. Control flow structure of the body of functions is used to minimize the number of groups that are generated. This reduces slot table size and results in less work for the runtime 4. Unused dispatch and receiver parameters to functions are not included in determining skippability of the function if they are not used inside of the body of the function.
Most breaking changes were for APIs that the compiler targets directly, and typical use of compose will not be affected: 1. Composer::startExpr was removed 2. Composer::endExpr was removed 3. Composer::call was deprecated 4. The non-varargs overloads of
key
have been removed. Use thevararg
version going forward. 5. The Pivotal annotation was deprecated. Usekey
as a replacement. 6. ScopeUpdateScope::updateScope was changed to expect a Function3 instead of Function1 7. restartableFunction and restartableFunctionN were updated to include additional compile time parameters ( I60756 , b/143464846 )Added sortWith and removeRange to MutableVector ( Icccf7 )
Added default method implementations for CompositionLifecycleObserver ( I24289 )
Applier now requires a clear() method for disposing compositions ( Ibe697 )
Added asMutableList() to MutableVector to allow it to be passed to public API without having to copy the entire list. ( I298df )
Added rememberCoroutineScope() to obtain a managed CoroutineScope in composition for launching jobs in response to events. ( I0e264 )
MutableVector is a new collection that does not implement any of the standard Collection interface. This collection offers speed above other requirements and is intended to only be used in internal implementations. ( I8ebd6 )
Temporarily removed
StableMutableList
andStableMutableMap
to avoid an issue in the version of Kotlin compose requires. These interfaces will be reintroduced once compose is updated to a version of Kotlin that doesn't have the issue.SnapshotStateList
andSnapshotStateMap
are now public but they will be deprecated onceStableMutableList
andStableMutableMap
are restored. ( Ia7769 )add top-level withFrameNanos function for animation timing ( Ie34c5 )
@Untracked annotation has been deprecated. Replace with @ComposableContract(tracked=false) ( Id211e )
RestartableFunction and associated APIs have been renamed to ComposableLambda, etc. These APIs were targeted only by the compiler so this should not affect source level compatibility normally. The rename was done primarily to communicate what this class is better when it shows up in stack traces ( I7eb25 )
@Composable annotation is no longer valid on classes ( Ia5f02 )
Ambient<T>
is now @Stable instead of @Immutable ( I0b4bb )Prior to this change, the compose compiler plugin would non-trivially intercept calls to constructors inside of a @Composable function if there was an ( I5205a , b/158123804 )
The Recompose composable is no longer a useful abstraction. Most recomposition should happen as a result of MutableState assignments. For anything beyond that, it is recommended that you use the
invalidate
function to trigger a recomposition of the current scope. ( Ifc992 )Observe is no longer a useful abstraction. If you need to replicate it, its implementation can be replicated by just creating a composable function which executes a composable lambda parameter. For example,
@Composable fun Observe(body: @Composable () -> Unit) = body()
( I40d37 )@Direct was deprecated in favor of @ComposableContract(restartable=false) ( If4708 )
Added an adapter for the recently introduced StateFlow which allows as to pre-populate the initial value so the returned State is non-nullable ( I61dd8 , b/156233789 )
Added an adapter for Flow. Example of the usage: val value by flow.collectAsState() ( If2198 , b/153375923 )
[Mutable]State property delegate operators moved to extensions to support Kotlin 1.4 property delegate optimizations. Callers must add imports to continue using
by state { ... }
orby mutableStateOf(...)
. ( I5312c )androidx.compose.ViewComposer has been moved to androidx.ui.node.UiComposer androidx.compose.Emittable has been removed. It was redundant with ComponentNode. androidx.compose.ViewAdapters has been removed. They are no longer a supported use case. Compose.composeInto has been deprecated. Use
setContent
orsetViewContent
instead. Compose.disposeComposition has been deprecated. Use thedispose
method on theComposition
returned bysetContent
instead. androidx.compose.Compose.subcomposeInto has moved to androidx.ui.core.subcomposeInto ComponentNode#emitInsertAt has been renamed to ComponentNode#insertAt ComponentNode#emitRemoveAt has been renamed to ComponentNode#removeAt ComponentNode#emitMode has been renamed to ComponentNode#move ( Idef00 )Updated the
ComposeFlags.COMPOSER_PARAM
flag to betrue
, which will change the code generation strategy for the compose plugin. At a high level, this causes @Composable functions to be generated with an additional synthetic parameter, which is passed through to subsequent @Composable calls in order for the runtime to properly manage execution. This is a significant binary breaking change, however, should preserve source-level compatibility in all sanctioned usage of compose. ( I7971c )Breaking changes to the ambients API. See log and
Ambient<T>
documentation for details ( I4c7ee , b/143769776 )Added ui-livedata - new artifact with an adapter for LiveData. Example of the usage: val value by liveData.observeAsState() ( Ie9e8c , b/150465596 )
Rx adapters without explicit initial value are deprecated. Using null is not always the best default, for example when you have a List it is better to start with emptyList() or any other reasonable default ( I00025 , b/161348384 )
Added ui-rxjava2 - new artifact with adapters for RxJava2. Example of the usage: val value by observable.subscribeAsState() ( Ifab4b , b/153369097 )
savedInstanceState()
can now be used with nullable types ( I6847f , b/153532190 )New listSaver() and mapSaver() to make it easier to write custom Saver objects ( I8cf68 , b/152331508 )
New functions: savedInstanceState() and rememberSavedInstanceState(). They are similar to state() and remember() but have a saved instance state support build in ( If1987 , b/152025209 )
Исправления ошибок
-
runOnIdleCompose
renamed torunOnIdle
( I83607 ) - Made LayoutNode experimental API ( I4f2e9 )
- androidx.ui.foundation.TextFieldValue and androidx.ui.input.EditorValue is deprecated. TextField, FilledTextField and CoreTextField composables that uses that type is also deprecated. Please use androidx.ui.input.TextFieldValue instead ( I4066d , b/155211005 )
- Removed deprecated DrawBackground API in favor of drawBackground extension APIs on Modifier. Refactored color, brush and paint drawBackground implementations to reduce code paths as well as remove requirement for Modifier to be created as part of composition. ( I0343a )
- Updated higher level compose APIs that expose a Canvas to expose CanvasScope instead. This removes the need for consumers to maintain their own Paint objects. For consumers that still require access to a Canvas they can use the drawCanvas extension method which provides a callback to issue drawing commands with the underlying Canvas. ( I80afd )
- WithConstraints trailing lambda API has been changed. Now instead of two params it has a receiver scope which in addition to constraints and layoutDirection provides minWidth, maxWidth, minHeight and maxHeight properties in Dp ( I91b9a , b/149979702 )
- Added symmetric padding modifier. ( I39840 )
- Updated wrapContentWidth and wrapContentHeight to expect vertical or horizontal Alignment rather than any Alignment. The gravity modifier was updated to accept vertical or horizontal Alignment. Row, Column and Stack were updated to support custom continuous Alignments. ( Ib0728 )
- ui-text module is renamed as ui-text-core ( I57dec )
- Improve DrawModifier API:
- Made the receiver scope for draw() ContentDrawScope
- Removed all parameters on draw()
- DrawScope has same interface as former CanvasScope
- ContentDrawScope has drawContent() method ( Ibaced , b/152919067 )
- ColoredRect has been deprecated. Use
Box(Modifier.preferredSize(width, height).drawBackground(color))
instead. ( I499fa , b/152753731 ) - Replaced Modifier plus operator with factory extension functions ( I225e4 )
- RowScope and ColumnScope members are now accessible outside Row and Column. ( I3a641 )
- Renamed LayoutFlexible to LayoutWeight. Renamed tight parameter to fill. ( If4738 )
- WithConstraints got LayoutDirection parameter ( I6d6f7 )
- Renamed background to DrawBackground and make it to be memorized by default ( Ia0bd3 )
- Replaced ButtonStyle with distinct functions and removed text (string) overload. See updated samples for usage information. ( If63ab , b/146478620 , b/146482131 )
-
runOnIdleCompose
andrunOnUiThread
are now global functions instead of methods on ComposeTestRule. ( Icbe8f )
Внешний вклад
- Remove unneeded API such as Looper and Handler from Compose Runtime porting layer ( I6847d )
- Deprecate
Flow<T>.collectAsState()
with no initial value. UseStateFlow<T>
or pass an explicit initial value instead. ( I63f98 , b/157674865 )