Compose 运行时
androidx.compose.runtime
androidx.compose.runtime.rxjava2
androidx.compose.runtime.rxjava3
androidx.compose.runtime.saveable
androidx.compose.runtime.snapshots
(请参阅所有 Compose 软件包的 API 参考文档)
最新更新 | 稳定版 | 候选版 | Beta 版 | Alpha 版 |
---|---|---|---|---|
2024 年 9 月 4 日 | 1.7.0 | - | - | 1.8.0-alpha01 |
结构
Compose 是 androidx
中 7 个 Maven 组 ID 的组合。每个组包含一组目标功能子集,每个子集都有自己的一组发行说明。
此表说明了这些组并链接到每一组的发行说明。
组 | 描述 |
---|---|
compose.animation | 在 Jetpack Compose 应用中构建动画以丰富用户体验。 |
compose.compiler | 转换 @Composable 函数并使用 Kotlin 编译器插件启用优化。 |
compose.foundation | 使用现成的构建块编写 Jetpack Compose 应用,并扩展基础知识以构建您自己的设计系统组件。 |
compose.material | 使用现成的 Material Design 组件构建 Jetpack Compose UI。这是 Compose 的更高级别入口点,旨在提供与 www.material.io 中描述的组件相匹配的组件。 |
compose.material3 | 使用 Material Design 3 组件构建 Jetpack Compose UI,这是 Material Design 的下一代演变。Material 3 包括更新的主题和组件以及 Material You 个性化功能(如动态颜色),旨在与新的 Android 12 视觉风格和系统 UI 保持一致。 |
compose.runtime | Compose 编程模型和状态管理的基本构建块,以及 Compose 编译器插件的目标核心运行时。 |
compose.ui | 与设备交互所需的 Compose UI 的基本组件,包括布局、绘图和输入。 |
声明依赖项
要添加对 Compose 的依赖项,您必须将 Google Maven 存储库添加到您的项目中。阅读Google 的 Maven 存储库以了解更多信息。
在应用或模块的 build.gradle
文件中添加所需构件的依赖项
Groovy
dependencies { implementation "androidx.compose.runtime:runtime:1.7.0" implementation "androidx.compose.runtime:runtime-livedata:1.7.0" implementation "androidx.compose.runtime:runtime-rxjava2:1.7.0" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
dependencies { implementation("androidx.compose.runtime:runtime:1.7.0") implementation("androidx.compose.runtime:runtime-livedata:1.7.0") implementation("androidx.compose.runtime:runtime-rxjava2:1.7.0") } android { buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
有关依赖项的更多信息,请参阅添加构建依赖项。
反馈
您的反馈有助于改进 Jetpack。如果您发现新的问题或有改进此库的想法,请告诉我们。在创建新问题之前,请查看此库中现有问题。您可以通过点击星形按钮为现有问题添加您的投票。
有关更多信息,请参阅问题跟踪器文档。
运行时跟踪版本 1.0
版本 1.0.0-beta01
2023 年 11 月 29 日
androidx.compose.runtime:runtime-tracing:1.0.0-beta01
已发布。版本 1.0.0-beta01 包含这些提交。
版本 1.0.0-alpha05
2023 年 11 月 15 日
androidx.compose.runtime:runtime-tracing:1.0.0-alpha05
已发布。版本 1.0.0-alpha05 包含这些提交。
错误修复
- 将依赖项固定到最低支持的稳定版本(即 compose-runtime 和 tracing-perfetto) - 修复了 compose-runtime-tracing 会将 compose-runtime 的较新版本引入应用的问题。
版本 1.0.0-alpha04
2023 年 8 月 23 日
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) - 使 Tracing Perfetto SDK API 与
android.os.Trace
保持一致。(I73ba0,b/282199917) - 应用启动时跟踪的先决条件。(Iad890)
- 合并实验性和公共 API 文件(I0f2e1,b/278769092)
版本 1.0.0-alpha02
2023 年 2 月 8 日
androidx.compose.runtime:runtime-tracing:1.0.0-alpha02
已发布。版本 1.0.0-alpha02 包含这些提交。
新功能
- 没有功能更改。下游依赖项
androidx.tracing:tracing-perfetto*
中进行了多项性能优化。
版本 1.0.0-alpha01
2022 年 9 月 7 日
androidx.compose.runtime:runtime-tracing:1.0.0-alpha01
已发布。版本 1.0.0-alpha01 包含这些提交。
新功能
androidx.compose.runtime:runtime-tracing
是一个库,在有工具支持的情况下(即将推出),它允许在 Compose 应用中进行扩展跟踪。此初始版本为 1.0.0-alpha01。
版本 1.8
版本 1.8.0-alpha01
2024 年 9 月 4 日
androidx.compose.runtime:runtime-*:1.8.0-alpha01
已发布。版本 1.8.0-alpha01 包含这些提交。
版本 1.7
版本 1.7.0
2024 年 9 月 4 日
androidx.compose.runtime:runtime-*:1.7.0
已发布。版本 1.7.0 包含这些提交。
自 1.6.0 以来重要更改
- 添加了提供一个组合局部变量的功能,该变量基于其他组合局部变量的值计算得出,默认情况下使用
compositionLocalWithComputedDefault()
或通过提供一个 lambda 来使用它来计算值,使用providesComputed
而不是provides
。 - 组合局部变量的值可以通过使用组合局部变量的
currentValue
属性从计算值的 lambda 内部访问来获取。这用于代替current
,后者仅在@Composable
函数中可访问。(Iadbc0) - 新创建的状态对象可以立即从其他快照(包括全局快照)中以其初始状态访问。任何后续修改在创建该对象的快照应用之前都不可见。
mutableStateOf()
的初始状态及其基本类型版本是作为参数传递给mutableStateOf()
的值。mutableStateListOf()
和mutableStateMapOf()
的初始状态为空。- 添加了
Snapshot.isInSnapshot
和Snapshot.PreexistingSnapshotId
,它们用于使状态对象能够在其创建时立即从全局快照中访问。 - 自定义状态对象可以通过遵循对内置快照对象所做的更改模式来支持立即访问。(I84a17)
- 为 Compose 库启用
nonSkippingGroupOptimization
。这会导致 androidx 中所有不可重新启动的可组合函数的生成代码更有效率。将来我们计划默认启用它。I(acbc08) - 在同一帧中的子组合中使可组合 lambda 无效。(98301c)
- 以与
onForgotten
相同的顺序调用onRelease
回调。(2cd790) - 启用强跳过模式(ed1766)
- 在更多情况下使
currentCompoundHashKey
唯一(d4a872)
版本 1.7.0-rc01
2024 年 8 月 21 日
androidx.compose.runtime:runtime-*:1.7.0-rc01
已发布。版本 1.7.0-rc01 包含这些提交。
版本 1.7.0-beta07
2024 年 8 月 7 日
androidx.compose.runtime:runtime-*:1.7.0-beta07
已发布。版本 1.7.0-beta07 包含这些提交。
版本 1.7.0-beta06
2024 年 7 月 24 日
androidx.compose.runtime:runtime-*:1.7.0-beta06
已发布。版本 1.7.0-beta06 包含这些提交。
版本 1.7.0-beta05
2024 年 7 月 10 日
androidx.compose.runtime:runtime-*:1.7.0-beta05
已发布。版本 1.7.0-beta05 包含这些提交。
版本 1.7.0-beta04
2024 年 6 月 26 日
androidx.compose.runtime:runtime-*:1.7.0-beta04
已发布。版本 1.7.0-beta04 包含这些提交。
版本 1.7.0-beta03
2024 年 6 月 12 日
androidx.compose.runtime:runtime-*:1.7.0-beta03
已发布。版本 1.7.0-beta03 包含这些提交。
版本 1.7.0-beta02
2024 年 5 月 29 日
androidx.compose.runtime:runtime-*:1.7.0-beta02
已发布。版本 1.7.0-beta02 包含这些提交。
版本 1.7.0-beta01
2024 年 5 月 14 日
androidx.compose.runtime:runtime-*:1.7.0-beta01
已发布。版本 1.7.0-beta01 包含这些提交。
版本 1.7.0-alpha08
2024 年 5 月 1 日
androidx.compose.runtime:runtime-*:1.7.0-alpha08
已发布。版本 1.7.0-alpha08 包含这些提交。
版本 1.7.0-alpha07
2024 年 4 月 17 日
androidx.compose.runtime:runtime-*:1.7.0-alpha07
已发布。版本 1.7.0-alpha07 包含这些提交。
新功能
- 添加了提供一个组合局部变量的功能,该变量基于其他组合局部变量的值计算得出,默认情况下使用
compositionLocalWithComputedDefault()
或通过提供一个 lambda 来使用它来计算值,使用providesComputed
而不是provides
。 - 组合局部变量的值可以通过使用组合局部变量的
currentValue
属性从计算值的 lambda 内部访问来获取。这用于代替current
,后者仅在@Composable
函数中可访问。(Iadbc0)
API 更改
- 新创建的状态对象可以立即从其他快照(包括全局快照)中以其初始状态访问。任何后续修改在创建该对象的快照应用之前都不可见。
mutableStateOf()
的初始状态及其基本类型版本是作为参数传递给mutableStateOf()
的值。mutableStateListOf()
和mutableStateMapOf()
的初始状态为空。- 添加了
Snapshot.isInSnapshot
和Snapshot.PreexistingSnapshotId
,它们用于使状态对象能够在其创建时立即从全局快照中访问。 - 自定义状态对象可以通过遵循对内置快照对象所做的更改模式来支持立即访问。(I84a17)
错误修复
- 修复了嵌套快照中
readObserver
的合并。这导致嵌套派生状态在snapshotFlow
中使用时未充分失效。(Idf138)
版本 1.7.0-alpha06
2024 年 4 月 3 日
androidx.compose.runtime:runtime-*:1.7.0-alpha06
已发布。版本 1.7.0-alpha06 包含这些提交。
错误修复
版本 1.7.0-alpha05
2024 年 3 月 20 日
androidx.compose.runtime:runtime-*:1.7.0-alpha05
已发布。版本 1.7.0-alpha05 包含这些提交。
错误修复
- 清除停用组合中的延迟更改(5950bc)
版本 1.7.0-alpha04
2024 年 3 月 6 日
androidx.compose.runtime:runtime-*:1.7.0-alpha04
已发布。版本 1.7.0-alpha04 包含这些提交。
性能改进
- 每个派生状态评估调用一次
Snapshot.current
(ee7daf) - 在组合中每个观察读取一次
currentRecord
(b882b2) - 删除
snapshotFlow
中意外的迭代器分配(231e56) - 为 Compose 库启用
nonSkippingGroupOptimization
。这会导致 androidx 中所有不可重新启动的可组合函数的生成代码更有效率。将来我们计划默认启用它。I(acbc08)
版本 1.7.0-alpha03
2024 年 2 月 21 日
androidx.compose.runtime:runtime-*:1.7.0-alpha03
已发布。版本 1.7.0-alpha03 包含这些提交。
API 更改
- 引入替换组以改进更改检测(0941b5)
性能改进
- 改进检测更改时的内存分配(53e7fd)
- 修复了 composer 中的内存泄漏(0e097d)
- 使用
ScopeMap
在重新组合时传递失效(e19a7e) - 优化失效映射以仅保留派生状态(f11c44)
- 将
IdentityArraySet
用法替换为ScatterSet
(db572e) - 优化
ScopeMap
中的removeScope
(bb0530)
版本 1.7.0-alpha02
2024 年 2 月 7 日
androidx.compose.runtime:runtime-*:1.7.0-alpha02
已发布。 版本 1.7.0-alpha02 包含以下提交。
错误修复
- 在同一帧中的子组合中使可组合 lambda 无效。(98301c)
- 以与
onForgotten
相同的顺序调用onRelease
回调。(2cd790) - 过滤在
snapshotFlow
中未观察到的状态更改。 (796b80)
性能改进
- 当快照观察者已为透明时,对其进行就地修改。 (f60f30)
- 优化
SnapshotIdSet.lowest()
。 (7ae149) - 在
SnapshotIdSet
中使用无分配的fold()
。 (532b7d) - 移除迭代器分配 (83f96b)
版本 1.7.0-alpha01
2024年1月24日
androidx.compose.runtime:runtime-*:1.7.0-alpha01
已发布。 版本 1.7.0-alpha01 包含以下提交。
性能优化
错误修复
版本 1.6
版本 1.6.8
2024 年 6 月 12 日
androidx.compose.runtime:runtime-*:1.6.8
已发布。版本 1.6.8 包含 以下提交。
版本 1.6.7
2024 年 5 月 1 日
androidx.compose.runtime:runtime-*:1.6.7
已发布。版本 1.6.7 包含 以下提交。
版本 1.6.6
2024 年 4 月 17 日
androidx.compose.runtime:runtime-*:1.6.6
已发布。自上次发布以来没有更改。
版本 1.6.5
2024 年 4 月 3 日
androidx.compose.runtime:runtime-*:1.6.5
已发布。版本 1.6.5 包含 以下提交。
版本 1.6.4
2024 年 3 月 20 日
androidx.compose.runtime:runtime-*:1.6.4
已发布。版本 1.6.4 包含 以下提交。
版本 1.6.3
2024 年 3 月 6 日
androidx.compose.runtime:runtime-*:1.6.3
已发布。版本 1.6.3 包含 以下提交。
版本 1.6.2
2024 年 2 月 21 日
androidx.compose.runtime:runtime-*:1.6.2
已发布。 版本 1.6.2 包含以下提交。
版本 1.6.1
2024 年 2 月 7 日
androidx.compose.runtime:runtime-*:1.6.1
已发布。 版本 1.6.1 包含以下提交。
错误修复
版本 1.6.0
2024年1月24日
androidx.compose.runtime:runtime-*:1.6.0
已发布。 版本 1.6.0 包含以下提交。
自 1.5.0 以来重要的更改
新功能
- 重新抛出在重组循环期间被吞并的异常 (4dff9a)
性能优化
错误修复
- 修复槽位表内存泄漏 (73fcfe)
- 跳过将被删除的子组合的重组。 (Ieeb99, b/254645321)
- 仅在 `RememberObserver` 存储在 `remember` 计算中时触发其生命周期。 (f6b4dc)
- 将
$dirty
捕获限制为内联 lambda。 (acfca0) - 修复可移动内容有时接收错误的组合本地值。 (035cd6)
版本 1.6.0-rc01
2024年1月10日
androidx.compose.runtime:runtime-*:1.6.0-rc01
已发布。 版本 1.6.0-rc01 包含以下提交。
版本 1.6.0-beta03
2023年12月13日
androidx.compose.runtime:runtime-*:1.6.0-beta03
已发布。 版本 1.6.0-beta03 包含以下提交。
版本 1.6.0-beta02
2023 年 11 月 29 日
androidx.compose.runtime:runtime-*:1.6.0-beta02
已发布。 版本 1.6.0-beta02 包含以下提交。
版本 1.6.0-beta01
2023 年 11 月 15 日
androidx.compose.runtime:runtime-*:1.6.0-beta01
已发布。 版本 1.6.0-beta01 包含以下提交。
API 更改
- 在注释中传播某些稳定性值。 (274a4c)
错误修复
- 在上下文中对组合本地作用域状态使用引用策略。 (83361c)
- 将
$dirty
捕获限制为内联 lambda。 (acfca0) - 修复可移动内容有时接收错误的组合本地值。 (035cd6)
- 在
RecomposeScopeImpl
中使用更快的无分配哈希映射。 (d79494) - 在
DerivedState
中使用ObjectIntMap
。 (21862e) - 在
DerivedState
中对SnapshotThreadLocal
中的 int 使用IntRef
。 (04eaf4)
版本 1.6.0-alpha08
2023年10月18日
androidx.compose.runtime:runtime-*:1.6.0-alpha08
已发布。 版本 1.6.0-alpha08 包含以下提交。
错误修复
- 仅在 `RememberObserver` 存储在 `remember` 计算中时触发其生命周期。 (f6b4dc)
- 改进无效列表排序中的分配。 (954d63)
- 在
SnapshotStateObserver
中使用新的无分配映射。 (4303ce) - 在组合停用时清除无效项。 (e001be)
版本 1.6.0-alpha07
2023年10月4日
androidx.compose.runtime:runtime-*:1.6.0-alpha07
已发布。 版本 1.6.0-alpha07 包含以下提交。
API 更改
SnapshotStateList
现在被标记为RandomAccess
以启用列表帮助程序的直接索引版本。 (I5210c, b/219554654)
版本 1.6.0-alpha06
2023年9月20日
androidx.compose.runtime:runtime-*:1.6.0-alpha06
已发布。 版本 1.6.0-alpha06 包含以下提交。
版本 1.6.0-alpha05
2023年9月6日
androidx.compose.runtime:runtime-*:1.6.0-alpha05
已发布。 版本 1.6.0-alpha05 包含以下提交。
版本 1.6.0-alpha04
2023 年 8 月 23 日
androidx.compose.runtime:runtime-*:1.6.0-alpha04
已发布。 版本 1.6.0-alpha04 包含以下提交。
新功能
- 重新抛出在重组循环期间被吞并的异常 (4dff9a)
API 更改
- 添加了一种停用
ReusableComposition
的方法,移除观察但保留节点。停用的组合可以通过调用setContent
再次激活。 (Ib7f31) - 添加
ReusableComposition
接口用于管理子组合的生命周期和重用。 (I812d1, b/252846775)
版本 1.6.0-alpha03
2023年8月9日
androidx.compose.runtime:runtime-*:1.6.0-alpha03
已发布。 版本 1.6.0-alpha03 包含以下提交。
错误修复
版本 1.6.0-alpha02
2023年7月26日
androidx.compose.runtime:runtime-*:1.6.0-alpha02
已发布。 版本 1.6.0-alpha02 包含以下提交。
新功能和性能增强
- 优化
rememberSaveable
(f01d79) - 推迟重新读取派生状态,直到记录更改为止 (f38099)
- 改进提供组合本地值 (a337ea)
SideEffect
被标记为@ExplicitGroupsComposable
以避免生成组。 (I74815)- 避免在重用时比较组合本地映射 (782071)
API 更改
- 为
CompositionLocalProviders
添加了一个特殊的重载,它避免了用于加快提供多个值的开销,但在提供单个值时会产生开销。 (I6d640, b/288169379)
错误修复
版本 1.6.0-alpha01
2023年6月21日
androidx.compose.runtime:runtime-*:1.6.0-alpha01
已发布。 版本 1.6.0-alpha01 包含以下提交。
错误修复
- 跳过将被删除的子组合的重组。 (Ieeb99, b/254645321)
- 减少应用快照时的分配。 (I65c09)
- 如果快照未修改,则避免在
DerivedState
中计算readableHash
(68c565)
版本 1.5
版本 1.5.4
2023年10月18日
androidx.compose.runtime:runtime-*:1.5.4
已发布。 版本 1.5.4 包含以下提交。
版本 1.5.3
2023年10月4日
androidx.compose.runtime:runtime-*:1.5.3
已发布。 版本 1.5.3 包含以下提交。
版本 1.5.2
2023 年 9 月 27 日
androidx.compose.runtime:runtime-*:1.5.2
已发布。 版本 1.5.2 包含以下提交。
版本 1.5.1
2023年9月6日
androidx.compose.runtime:runtime-*:1.5.1
已发布。 版本 1.5.1 包含以下提交。
版本 1.5.0
2023年8月9日
androidx.compose.runtime:runtime-*:1.5.0
已发布。 版本 1.5.0 包含以下提交。
API 更改
- 删除了重组、颜色动画和
AndroidComposeView
中的内存分配。 (Ib2bfa) - 添加了
@StateFactoryMarker
注解,用于标记创建状态的函数,这些函数必须包装在remember
调用中。 (I64550) - 添加了 State 和
MutableState
的原始版本 (fb3d89) - 添加了
Snapshot.isApplyObserverNotificationPending
(I672a5) - 添加了
State
API 的原始版本,允许在State
对象中跟踪 Int、Long、Float 和 Double 值,而不会因自动装箱而产生额外开销。使用新的工厂方法mutableIntState(Int)
、mutableFloatStateOf(Float)
等来使用这些功能。 (I48e43)
错误修复
- 跳过将被删除的子组合的重组。 (Ieeb99, b/254645321)
- 不在
ComposerImpl
中保留快照引用 (0206f7) - 不要应用两次组合 (f5791b)
- 确保未初始化的派生状态值的失效 (aa2a92)
- 在组合释放期间调用
onEndChanges
。 (62cc8c) - 修复将内容移动到子组合的问题 (4beb41)
- 修复潜在的死锁 (c1a425 和 8edce0)
- 为 Android 窗口创建的 recomposer 现在只会阻塞对
withFrameNanos
的调用,而不是在收到 ON_STOP 通知时阻塞所有组合。这意味着与已停止的活动关联的窗口将继续针对数据更改进行重组,但动画或withFrameNanos
的任何其他调用者都将被阻塞。 (Id9e7f,b/240975572) - 在释放效果之前为
LayoutNode
执行停用回调 3784073 - 修复重新启动的 lambda 函数的更改标志 ea81df9
- 修复具有节点的 Composable 的实时编辑回归 73fd4d8
- ON_STOP 应暂停帧时钟广播而不是组合 ae276f1
- 为未更改的派生状态使
SnapshotStateObserver
范围失效 84d9b1c - 修复释放组合时可能发生的死锁 28761fc
- 修复将内容移动到子组合的问题 92d4156
- 修复重新启动的 lambda 函数的更改标志 (8a03e9)
- 在释放效果之前为
LayoutNode
执行停用回调 (8b0fa4) - 修复在结束节点组时
endToMarker()
的问题。 (d71d980) - 使用当前的
SlotWriter
组进行停用检查 (a0b518b) - 删除
SlotTable.moveSlotGapTo()
中的fill
并将其移动到关闭位置 (81f9935) - 修复可移动内容移动时缺少失效的问题 (1d7c024)
- 修复已移动的可移动内容的立即失效问题 (8676618)
性能改进
- 如果快照未修改,则避免在
DerivedState
中计算readableHash
。 (307102) - 减少了内存分配 (I65c09、d7ea77、727974 和 445808 )
- 快速取消 compose
CoroutineScopes
(a55362 和 bd382f) - 用不可访问的状态记录覆盖状态对象的记录 (c986960)
- 在实现组时使用正确范围的 composer (9a5e5b6)
- 使用
IdentityArraySet
存储快照失效 (7f60cca) - 减少快照观察的内存分配 (5bc535f)
版本 1.5.0-rc01
2023年7月26日
androidx.compose.runtime:runtime-*:1.5.0-rc01
已发布。 版本 1.5.0-rc01 包含以下提交。
错误修复
将重新读取派生状态延迟到记录更改时 (f38099)
提供了一个可选的检查,建议将
mutableStateOf()
调用迁移到其相应的原始类型专用类型。其 lint ID 为AutoboxingStateCreation
。之前,此检查默认对所有项目启用。若要在 Android Studio 的编辑器和项目的 lint 输出中查看此警告,请将其严重性从信息性更改为警告(或更高),方法是在模块的 build.gradle 或 build.gradle.kts 配置中声明warning "AutoboxingStateCreation"
,如下所示 (I34f7e)android { lint { warning "AutoboxingStateCreation" } ... }
版本 1.5.0-beta03
2023 年 6 月 28 日
androidx.compose.runtime:runtime-*:1.5.0-beta03
已发布。 版本 1.5.0-beta03 包含以下提交。
错误修复
- 跳过将被删除的子组合的重组。 (Ieeb99, b/254645321)
版本 1.5.0-beta02
2023 年 6 月 7 日
androidx.compose.runtime:runtime-*:1.5.0-beta02
已发布。 版本 1.5.0-beta02 包含以下提交。
性能改进
- 如果快照未修改,则避免在
DerivedState
中计算readableHash
。 (307102)
版本 1.5.0-beta01
2023 年 5 月 24 日
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) - 快速取消 compose
CoroutineScopes
(a55362 和 bd382f) - 不要应用两次组合 (f5791b)
- 确保未初始化的派生状态值的失效 (aa2a92)
- 在组合释放期间调用
onEndChanges
。 (62cc8c) - 修复将内容移动到子组合的问题 (4beb41)
- 修复潜在的死锁 (c1a425
- ON_STOP 应暂停帧时钟广播而不是组合 (f4a2d1)
- 修复重新启动的 lambda 函数的更改标志 (8a03e9)
- 在释放效果之前为
LayoutNode
执行停用回调 (8b0fa4)
外部贡献
- 添加了
Snapshot.isApplyObserverNotificationPending
(I672a5)
版本 1.5.0-alpha04
2023 年 5 月 10 日
androidx.compose.runtime:runtime-*:1.5.0-alpha04
已发布。 版本 1.5.0-alpha04 包含以下提交。
API 更改
- 添加了
State
API 的原始版本,允许在State
对象中跟踪 Int、Long、Float 和 Double 值,而不会因自动装箱而产生额外开销。使用新的工厂方法mutableIntState(Int)
、mutableFloatStateOf(Float)
等来使用这些功能。 (I48e43)
错误修复
在组合释放期间调用
onEndChanges
。在Composition.dispose
期间删除的焦点节点正在订阅onEndChanges
以重置焦点。(03d4a47)确保未初始化的派生状态值的失效。每个派生状态都与其在
SnapshotStateObserver
中的依赖项列表相关联,用于在依赖项更改时使与派生状态关联的范围失效。依赖项更改在快照前进时注册,这可能发生在派生状态读取之后(由于调用Snapshot.notifyObjectsInitialized()
)。之前
SnapshotStateObserver
中的派生状态观察逻辑是先清理旧的依赖项,然后读取新值。这导致了一个竞争条件,其中失效发生在已清理的状态中,依赖项失效未注册。此更改重新排序了派生状态读取和依赖项清理,确保失效始终发生在有效状态中。 (c472be6)
版本 1.5.0-alpha03
2023 年 4 月 19 日
androidx.compose.runtime:runtime-*:1.5.0-alpha03
已发布。 版本 1.5.0-alpha03 包含以下提交。
API 更改
- 为 Android 窗口创建的 recomposer 现在只会阻塞对
withFrameNanos
的调用,而不是在收到 ON_STOP 通知时阻塞所有组合。这意味着与已停止的活动关联的窗口将继续针对数据更改进行重组,但动画或withFrameNanos
的任何其他调用者都将被阻塞。 (Id9e7f,b/240975572)
错误修复
- 修复快照列表和映射中潜在的死锁 5c1a425
- 在释放效果之前为
LayoutNode
执行停用回调 3784073 - 修复重新启动的 lambda 函数的更改标志 ea81df9
- 修复具有节点的 Composable 的实时编辑回归 73fd4d8
- ON_STOP 应暂停帧时钟广播而不是组合 ae276f1
- 为未更改的派生状态使
SnapshotStateObserver
范围失效 84d9b1c - 修复释放组合时可能发生的死锁 28761fc
- 修复将内容移动到子组合的问题 92d4156
版本 1.5.0-alpha02
2023 年 4 月 5 日
androidx.compose.runtime:runtime-*:1.5.0-alpha02
已发布。 版本 1.5.0-alpha02 包含以下提交。
新功能
- Kotlin 的
getValue
运算符现在可以是可组合的 (f174f6e)
错误修复和性能改进
- 用不可访问的状态记录覆盖状态对象的记录 (c986960)
- 在实现组时使用正确范围的 composer (9a5e5b6)
- 修复在结束节点组时
endToMarker()
的问题。 (d71d980) - 使用当前的
SlotWriter
组进行停用检查 (a0b518b) - 使用
IdentityArraySet
存储快照失效 (7f60cca) - 删除
SlotTable.moveSlotGapTo()
中的fill
并将其移动到关闭位置 (81f9935) - 修复可移动内容移动时缺少失效的问题 (1d7c024)
- 修复已移动的可移动内容的立即失效问题 (8676618)
- 减少快照观察的内存分配 (5bc535f)
版本 1.5.0-alpha01
2023 年 3 月 22 日
androidx.compose.runtime:runtime-*:1.5.0-alpha01
已发布。 版本 1.5.0-alpha01 包含以下提交。
新功能
- 添加了
Modifier.Node#coroutineScope
以允许Modifier.Nodes
启动协程 (I76ef9) - 通过实现
CompositionLocalConsumerModifierNode
接口,允许Modifier.Nodes
读取CompositionLocals
。 (Ib44df)
版本 1.4
版本 1.4.3
2023 年 5 月 3 日
androidx.compose.runtime:runtime-*:1.4.3
已发布,无更改。
版本 1.4.2
2023 年 4 月 19 日
androidx.compose.runtime:runtime-*:1.4.2
已发布。 版本 1.4.2 包含以下提交。
错误修复
修复快照列表和映射中潜在的死锁问题 2eb6570
如果修改与对状态记录的直接写入同时发生,则向
SnapshotStateList
或SnapshotStateMap
添加内容可能会遇到死锁。通过 93fcae828b 引入的更改(使用直接写入释放未使用的记录)使这种情况更容易发生。现在锁的顺序是,当持有映射或列表锁时,永远不会尝试获取快照锁。
版本 1.4.1
2023 年 4 月 5 日
androidx.compose.runtime:runtime-*:1.4.1
已发布。 版本 1.4.1 包含以下提交。
错误修复
- 修复结束节点组时的
endToMarker()
。 d71d980
版本 1.4.0
2023 年 3 月 22 日
androidx.compose.runtime:runtime-*:1.4.0
已发布。 版本 1.4.0 包含以下提交。
自 1.3.0 版本以来的重要更改
- 在第一次组合时使用来自
LiveData
的初始化值 3680e25 - 添加
ComposeNodeLifecycleCallback
用于观察 Compose 节点的生命周期。 8b6a258 - 向
ComposableMethod
添加parameterTypes
属性 7b6c7ad
错误修复和性能改进
- 在
SnapshotStateObserver
中清除两个作用域索引 29f4a3e - 添加不可跳过 lambda 体中所需的组 7d06752
- 改进快照状态的内存引用特性 93fcae8
- 移除组合局部查找中的装箱操作 0875717
- 为不可重用节点组使用正确的键 6388d8d
- 保护
SnapshotStateObserver
免受递归和并发应用的影响 98cb6ba - 在
IdentityArraySet
的“get”方法中添加了检查索引边界的检查 35a77d3 - 更新 Compose 模块以使用
ViewTreeLifecycleOwner
扩展 21c2122 - 在 Recomposer 完成帧后发送应用通知。 98f2641
- 修复取消 Recomposer 时发生的索引超出范围崩溃 8f8656f
- 如果 Composition 的父提供程序已更改,则始终强制重新组合 9526fcc
- Recomposer 对已取消作业的容忍度 a55f7ed
- 改进对大量合成器的失效处理 9b7ed67
- 修复为非本地返回生成结束组的问题 b6f590c
版本 1.4.0-rc01
2023 年 3 月 8 日
androidx.compose.runtime:runtime-*:1.4.0-rc01
已发布。 版本 1.4.0-rc01 包含以下提交。
错误修复
版本 1.4.0-beta02
2023 年 2 月 22 日
androidx.compose.runtime:runtime:1.4.0-beta02
和 androidx.compose.runtime:runtime-saveable:1.4.0-beta02
已发布。 版本 1.4.0-beta02 包含以下提交。
版本 1.4.0-beta01
2023 年 2 月 8 日
androidx.compose.runtime:runtime-*:1.4.0-beta01
已发布。 版本 1.4.0-beta01 包含以下提交。
API 更改
- 添加了
ComposeNodeLifecycleCallback
,它允许观察 Compose 节点的生命周期(I3731b) - 向
Composer.disableSourceInformation()
添加了@TestOnly
,因为此函数仅在测试中安全调用。(I896c8)
错误修复
版本 1.4.0-alpha05
2023 年 1 月 25 日
androidx.compose.runtime:runtime:1.4.0-alpha05
和 androidx.compose.runtime:runtime-saveable:1.4.0-alpha05
已发布。 版本 1.4.0-alpha05 包含以下提交。
API 更改
- 更多内联/已弃用隐藏函数的类型/可空性 (I24f91)
版本 1.4.0-alpha04
2023 年 1 月 11 日
androidx.compose.runtime:runtime-*:1.4.0-alpha04
已发布。 版本 1.4.0-alpha04 包含以下提交。
API 更改
TestMonotonicFrameClock
现在使用正确的实验性注解。(I95c9e)
错误修复
- 保护
SnapshotStateObserver
免受递归和并发应用的影响 (d902fb)
版本 1.4.0-alpha03
2022 年 12 月 7 日
androidx.compose.runtime:runtime-*:1.4.0-alpha03
已发布。 版本 1.4.0-alpha03 包含以下提交。
API 更改
- 向
ComposableMethod
类添加一个新的公共方法,类似于java.lang.reflect.Method#getParameterTypes()
(Iab0c3)
错误修复
- 快照应用通知现在在
Recomposer
完成应用更改后发送。(Iad6c0,b/222093277)
版本 1.4.0-alpha02
2022 年 11 月 9 日
androidx.compose.runtime:runtime-*:1.4.0-alpha02
已发布。 版本 1.4.0-alpha02 包含以下提交。
版本 1.4.0-alpha01
2022 年 10 月 24 日
androidx.compose.runtime:runtime-*:1.4.0-alpha01
已发布。 版本 1.4.0-alpha01 包含以下提交。
API 更改
SnapshotStateList
和SnapshotStateMap
现在分别具有toList()
和toMap()
的显式实现。这些方法返回其当前内容,而无需执行复制,因为它们返回用于存储其内容的内部不可变数据。例如,此值可用于使用snapshotFlow
生成值流,而无需复制数据。(Ica2bd)
版本 1.3
版本 1.3.3
2023 年 1 月 11 日
androidx.compose.runtime:runtime-*:1.3.3
已发布。 版本 1.3.3 包含以下提交。
- 自 1.3.2 版本以来没有更改
版本 1.3.2
2022 年 12 月 7 日
androidx.compose.runtime:runtime-*:1.3.2
已发布。 版本 1.3.2 包含以下提交。
错误修复
- 更新以支持 androidx.compose.ui 1.3.2
版本 1.3.1
2022 年 11 月 9 日
androidx.compose.runtime:runtime-*:1.3.1
已发布。 版本 1.3.1 包含以下提交。
版本 1.3.0
2022 年 10 月 24 日
androidx.compose.runtime:runtime-*:1.3.0
已发布。 版本 1.3.0 包含以下提交。
自 1.2.0 版本以来的重要更改
异常处理/实时编辑支持
- 为了更好地支持实时编辑,添加了 API 以启用在组合期间处理异常的功能
- 热重载的组合错误处理
- 在保存/恢复时处理实时编辑错误
组合跟踪
- 添加了运行时跟踪 API 以支持新的组合跟踪工具
- 生成可组合跟踪事件开始/结束调用
- 重新添加 ComposerKt.traceEventStart(Int, String)
可组合反射 API
- 添加了一个新的
ComposableMethod
API,以允许更可靠地基于反射调用可组合 API。 - 将 invokeComposable 移动到 Compose 运行时
- 重新设计调用可组合方法的 API
运行时修复
快照系统
- 快照系统在内存管理、性能和正确性方面进行了各种改进。
- 优化 SnapshotStateObserver 中的作用域移除
- 处置从透明快照创建的嵌套快照
- 修复从全局快照读取状态时的竞争条件
- 在 SnapshotStateObserver 中支持 DerivedState
- 防止在其他作用域中读取时从组合中移除派生状态
- 在 DerivedState 内部使用 IdentityArrayMap 而不是 HashMap
- 更新派生状态观察者以使用可变向量
- 更新 SnapshotStateObserver 状态清理
- 用 ArraySet 替换 SnapshotStateObserver.invalidated
- 修复从全局快照读取状态时的竞争条件
- 修复在 DerivedState 哈希计算中使用陈旧记录的问题
- 修复推进全局快照时的竞争条件
- 加快 SnapshotStateObserver 中的作用域观察清理速度
版本 1.3.0-rc01
2022 年 10 月 5 日
androidx.compose.runtime:runtime-*:1.3.0-rc01
已发布。 版本 1.3.0-rc01 包含以下提交。
错误修复
- 修复来自插槽表的
ArrayIndexOutOfBoundsException
(b/249076084)
版本 1.3.0-beta03
2022 年 9 月 21 日
androidx.compose.runtime:runtime-*:1.3.0-beta03
已发布。 版本 1.3.0-beta03 包含以下提交。
行为破坏性更改
- 传递给
remember
和rememberCoroutineScope
的参数已更改为crossinline
。这将针对提前返回报告错误,而不是允许提前返回,这会导致稍后报告内部错误。 - 此更改可能会导致报告新的编译器错误,要求从传递给这些函数的 lambda 中删除非局部返回。(Ibea62)
版本 1.3.0-beta02
2022 年 9 月 7 日
androidx.compose.runtime:runtime-*:1.3.0-beta02
已发布。版本 1.3.0-beta02 包含这些提交。
错误修复
- 更新的 API(I64ca0)
版本 1.3.0-beta01
2022 年 8 月 24 日
androidx.compose.runtime:runtime-*:1.3.0-beta01
已发布。版本 1.3.0-beta01 包含这些提交。
API 更改
- 已向
CompositionData
添加了一个find
方法,以允许使用此 API 的开发人员工具使用其标识快速查找组合的子组。(I5794f)
版本 1.3.0-alpha03
2022 年 8 月 10 日
androidx.compose.runtime:runtime-*:1.3.0-alpha03
已发布。版本 1.3.0-alpha03 包含这些提交。
版本 1.3.0-alpha02
2022 年 7 月 27 日
androidx.compose.runtime:runtime-*:1.3.0-alpha02
已发布。版本 1.3.0-alpha02 包含这些提交。
API 更改
- 重新添加了
ComposerKt.traceEventStart(Int, String)
以实现向后兼容性(I6e6de)
版本 1.3.0-alpha01
2022 年 6 月 29 日
androidx.compose.runtime:runtime-*:1.3.0-alpha01
已发布。版本 1.3.0-alpha01 包含这些提交。
API 更改
- 将实用程序功能移动到运行时(I4f729)
版本 1.2
版本 1.2.1
2022 年 8 月 10 日
androidx.compose.runtime:runtime-*:1.2.1
已发布。版本 1.2.1 包含这些提交。
错误修复
- 修复内存泄漏:处理从透明快照创建的嵌套快照 b/239603305
版本 1.2.0
2022 年 7 月 27 日
androidx.compose.runtime:runtime-*:1.2.0
已发布。版本 1.2.0 包含这些提交。
自 1.1.0
以来重要更改
Compose Runtime 在 1.2.0 中引入了少量功能,以及许多稳定性错误修复。最显著的新功能是 引入
movableContentOf
API,它可用于启用复杂的 UX,例如共享元素过渡。movableContentOf
API 将可组合 lambda 转换为一个 lambda,该 lambda 将其状态和相应的节点移动到调用它的任何新位置。当之前的调用离开组合时,状态会暂时保留,如果对 lambda 的新调用进入组合,则状态和关联的节点会移动到新调用的位置。如果没有添加新的调用,则状态将永久删除,并且会通知 remember 观察者。如果在同一组合中多次调用
movableContentOf
lambda,则每次调用都会创建新的状态和节点,并且随着调用离开组合和新的调用进入,状态会从第一个离开的调用按其调用的顺序移动到进入的调用。所有未被新调用声明的状态都将永久删除。除了此功能和其他一些新功能外,还花费了大量时间来稳定运行时和 Snapshot 状态系统。已删除各种内存泄漏并优化了代码路径。
下面可以找到更改的汇总列表
1.2
中的新功能
- 添加实验性 snapshot unsafeEnter/Leave
- 添加 Snapshot.asContextElement 实验性 API
- 引入 Snapshot.withoutReadObservation
- 允许状态在组合内移动
- Compose 中的重新组合跟踪
1.2
中的性能
1.2
中的错误修复
- 从发布的重新组合作用域中删除跟踪信息
- 防止在其他作用域中读取时从组合中移除派生状态
- 在 SnapshotStateObserver 中使用更有效的 removeScope()
- 清理组合中派生的状态依赖项
- 修复可移动内容内部重新组合后 currentCompositeKeyHash 更改的问题
- 在处置期间清理无效的组合
- 修复重新组合期间派生状态读取的问题
- 修复观察派生状态对象时的内存泄漏
- 修复可移动内容组合哈希键以保持一致
- 修复作曲家崩溃的一个角落案例
- 确保组的强制无效化强制重新组合
- 修复 rememberSaveable 带有输入时以错误顺序恢复的错误
版本 1.2.0-rc03
2022 年 6 月 29 日
androidx.compose.runtime:runtime-*:1.2.0-rc03
已发布。版本 1.2.0-rc03 包含这些提交。
错误修复
- 派生状态观察以前无条件地从重新组合作用域和组合中一起删除,这破坏了可能仍在观察派生状态的其他作用域。此更改仅在其他作用域不再观察到派生状态实例时才删除它。(b/236618362)
版本 1.2.0-rc02
2022 年 6 月 22 日
androidx.compose.runtime:runtime-*:1.2.0-rc02
已发布。版本 1.2.0-rc02 包含这些提交。
版本 1.2.0-rc01
2022 年 6 月 15 日
androidx.compose.runtime:runtime-*:1.2.0-rc01
已发布。版本 1.2.0-rc01 包含这些提交。
API 更改
- Compose 库中的接口现在使用 jdk8 默认接口方法构建(I5bcf1)
版本 1.2.0-beta03
2022 年 6 月 1 日
androidx.compose.runtime:runtime-*:1.2.0-beta03
已发布。版本 1.2.0-beta03 包含这些提交。
版本 1.2.0-beta02
2022 年 5 月 18 日
androidx.compose.runtime:runtime-*:1.2.0-beta02
已发布。版本 1.2.0-beta02 包含这些提交。
版本 1.2.0-beta01
2022 年 5 月 11 日
androidx.compose.runtime:runtime-*:1.2.0-beta01
已发布。版本 1.2.0-beta01 包含这些提交。
新功能
- 这是 1.2 的第一个 Beta 版本!
API 更改
- 添加了实验性的
Snapshot.unsafeEnter/unsafeLeave
(I108f3) - 添加了实验性的
Snapshot.asContextElement()
API(Iff072) @ComposableTarget
注解和@ComposableTargetMarker
标记的注解现在可以使用@file
前缀在文件范围内使用。在文件范围内使用目标注解将导致编译器假设文件中所有可组合函数都旨在针对关联的应用器。例如,使用@file:UiComposable
声明所有@Composable
函数都针对 Compose UI 应用器。需要针对其他应用器的函数必须为所需的应用器显式提供目标标记注解。(I40804)
版本 1.2.0-alpha08
2022 年 4 月 20 日
androidx.compose.runtime:runtime-*:1.2.0-alpha08
已发布。版本 1.2.0-alpha08 包含这些提交。
API 更改
- 向
CompositionTracer
接口添加了TracingInProgress
。(Ic6f12) - 向 Composer 添加
recomposeScopeIdentity
(I0c873) - 将跟踪 API(Composer.setTracer)限制为
OptIn(InternalComposeTracingApi)
。(I9187f) - 添加了
ResuableContentHost
,它允许更好地控制为可重用内容创建的状态的生命周期。例如,如果子组合暂时未在使用,则可以停用该内容,从而导致组合中所有记住的状态被遗忘,从而触发例如所有可处置的效果。(I2c0f2,b/220322704)
版本 1.2.0-alpha07
2022 年 4 月 6 日
androidx.compose.runtime:runtime-*:1.2.0-alpha07
已发布。版本 1.2.0-alpha07 包含这些提交。
API 更改
- 添加了新函数
Snapshot.withoutReadObservation { ... }
。它允许用户运行传递的 lambda 而不订阅在此块期间读取的状态值的更改。您可能会发现它在您希望利用基于快照的线程安全读写,但又希望能够读取值而不导致不必要的重新组合或重新测量的情况下很有用。(I9f365,b/214054486)
版本 1.2.0-alpha06
2022 年 3 月 23 日
androidx.compose.runtime:runtime-*:1.2.0-alpha06
已发布。版本 1.2.0-alpha06 包含这些提交。
版本 1.2.0-alpha05
2022 年 3 月 9 日
androidx.compose.runtime:runtime-*:1.2.0-alpha05
已发布。版本 1.2.0-alpha05 包含这些提交。
外部贡献
- 更新为使用 Kotlinx 协程 1.6.0(I3366d)
版本 1.2.0-alpha04
2022 年 2 月 23 日
androidx.compose.runtime:runtime-*:1.2.0-alpha04
已发布。版本 1.2.0-alpha04 包含这些提交。
API 更改
添加了
ComposableTarget
、ComposableTargetMarker
和ComposableOpenTarget
,允许在可组合函数调用目标应用器时报告编译时错误,而它并非设计用于使用该应用器。在大多数情况下,Compose 编译器插件可以推断注释,因此直接使用这些注释的情况应该很少。无法推断的情况包括创建和使用自定义应用器、抽象可组合函数(例如接口方法)、可组合 lambda 的字段或全局变量(局部变量和参数是推断的),或者在使用
ComposeNode
或相关的可组合函数时。对于自定义应用器,调用
ComposeNode
或ReusableComposeNode
的可组合函数需要为该函数和任何可组合的 lambda 参数类型添加CompoableTarget
注解。但是,建议创建一个用ComposableTargetMarker
注解的注解,然后使用标记的注解代替直接使用ComposableTarget
。用ComposableTargetMarker
标记的可组合注解等效于一个ComposbleTarget
,其应用器参数为属性类的完全限定名。有关使用ComposableTargetMarker
的示例,请参阅anroidx.compose.ui.UiComposable
。(I38f11)
版本 1.2.0-alpha03
2022年2月9日
androidx.compose.runtime:runtime-*:1.2.0-alpha03
已发布。版本 1.2.0-alpha03 包含以下提交。
API 更改
添加了
movableContentOf
,它将可组合 lambda 转换为一个 lambda,该 lambda 将其状态和相应的节点移动到它被调用的任何新位置。当先前的调用离开组合时,状态会暂时保留,如果对 lambda 的新调用进入组合,则状态和关联的节点将移动到新调用的位置。如果没有添加新的调用,则状态将永久删除,并通知 remember 观察者。如果在同一组合中多次调用
movableContentOf
lambda,则会为每次调用创建新的状态和节点,并且随着调用离开组合和新调用进入,状态会按照调用的顺序从第一个离开的调用移动到进入的调用。所有未被新调用声明的状态都将永久删除。(Ib4850)向组合添加了一个跟踪 API,以使工具能够提供更详细的可组合函数跟踪。编译器现在生成对跟踪 API 的调用,其中包含源信息。(Ib0eb5)
要从发布版本中删除这些调用和关联的源信息,请添加以下 Proguard 规则
-assumenosideeffects public class androidx.compose.runtime.ComposerKt { boolean isTraceInProgress(); void traceEventStart(int,java.lang.String); void traceEventEnd(); }
添加
InternalComposeScope
,使工具能够在重新组合期间识别可组合项。(I07a3f)
版本 1.2.0-alpha02
2022年1月26日
androidx.compose.runtime:runtime-*:1.2.0-alpha02
已发布。版本 1.2.0-alpha02 包含以下提交。
版本 1.2.0-alpha01
2022年1月12日
androidx.compose.runtime:runtime-*:1.2.0-alpha01
已发布。版本 1.2.0-alpha01 包含以下提交。
API 更改
- 为
CompositionData
添加了identity
字段,用于在布局检查器中生成不变 ID。(Ic116e)
依赖项更新
- 现在依赖于 Kotlin
1.6.10
。
版本 1.1
版本 1.1.1
2022 年 2 月 23 日
androidx.compose.runtime:runtime-*:1.1.1
已发布。版本 1.1.1 包含以下提交。
错误修复
- 修复
androidx.compose.ui.platform.RenderNodeLayer.updateDisplayList
中的NullPointerException
(aosp/1947059,b/206677462) - 修复在 Android 上从剪贴板读取时由剪贴板内容导致的崩溃。(I06020,b/197769306)
- 修复了
LazyVerticalGrid
中的 RTL 问题(aosp/1931080,b/207510535)
版本 1.1.0
2022年2月9日
androidx.compose.runtime:runtime-*:1.1.0
已发布。版本 1.1.0 包含以下提交。
自 1.0.0 以来重要更改
- 稳定支持 Android 12 过度滚动效果
- 改进了触摸目标大小
- 请注意,相对于 Compose 1.0,Material 组件将扩展其布局空间以满足 Material 辅助功能指南 中关于触摸目标大小 的要求。例如,即使您将 Button 的大小设置为更小,Button 触摸目标也会扩展到最小
48x48dp
的大小。这使 Compose Material 与 Material Design Components 的行为保持一致,如果您混合使用 View 和 Compose,则可以提供一致的行为。此更改还确保当您使用 Compose Material 组件创建 UI 时,将满足触摸目标辅助功能的最低要求。 - 稳定支持导航栏
- 将许多以前实验性的 API 提升为稳定版
- 对 Kotlin 的较新版本提供支持
版本 1.1.0-rc03
2022年1月26日
androidx.compose.runtime:runtime-*:1.1.0-rc03
已发布。版本 1.1.0-rc03 包含以下提交。
错误修复
- 更新以支持 Compose Material
1.1.0-rc03
版本 1.1.0-rc01
2021年12月15日
androidx.compose.runtime:runtime-*:1.1.0-rc01
已发布。版本 1.1.0-rc01 包含以下提交。
版本 1.1.0-beta04
2021年12月1日
androidx.compose.runtime:runtime-*:1.1.0-beta04
已发布。版本 1.1.0-beta04 包含以下提交。
新功能
- 更新为与 Kotlin
1.6.0
兼容
版本 1.1.0-beta03
2021年11月17日
androidx.compose.runtime:runtime-*:1.1.0-beta03
已发布。版本 1.1.0-beta03 包含以下提交。
版本 1.1.0-beta02
2021年11月3日
androidx.compose.runtime:runtime-*:1.1.0-beta02
已发布。版本 1.1.0-beta02 包含以下提交。
API 更改
- 快照代码被拆分为多个文件,但所有文件仍然位于同一个 JVM 类中。(Ic6c98)
版本 1.1.0-beta01
2021年10月27日
androidx.compose.runtime:runtime-*:1.1.0-beta01
已发布。版本 1.1.0-beta01 包含以下提交。
版本 1.1.0-alpha06
2021年10月13日
androidx.compose.runtime:runtime-*:1.1.0-alpha06
已发布。版本 1.1.0-alpha06 包含以下提交。
API 更改
- 从需要跨模块调用的 Composer 方法中删除了
InternalCompilerApi
(I1aa0b) Recomposer.state
已弃用,并替换为Recomposer.currentState
,以将其类型更改为 StateFlow(Ic2ab3,b/197773820)
版本 1.1.0-alpha05
2021年9月29日
androidx.compose.runtime:runtime-*:1.1.0-alpha05
已发布。版本 1.1.0-alpha05 包含以下提交。
版本 1.1.0-alpha04
2021年9月15日
androidx.compose.runtime:runtime-*:1.1.0-alpha04
已发布。版本 1.1.0-alpha04 包含以下提交。
版本 1.1.0-alpha03
2021年9月1日
androidx.compose.runtime:runtime-*:1.1.0-alpha03
已发布。版本 1.1.0-alpha03 包含以下提交。
新功能
- Compose 编译器现在支持 Compose Runtime 的旧版本(1.0)。在此更改之前,Compose 编译器仅与相同版本或更高版本的 Compose Runtime 兼容。在此更改之后,Compose 编译器与 Compose Runtime 的旧版本(1.0)兼容。(aosp/1796968)
- 更新 Compose
1.1.0-alpha03
以依赖于 Kotlin1.5.30
。(I74545)
版本 1.1.0-alpha02
2021年8月18日
androidx.compose.runtime:runtime-*:1.1.0-alpha02
已发布。版本 1.1.0-alpha02 包含以下提交。
版本 1.1.0-alpha01
2021年8月4日
androidx.compose.runtime:runtime-*:1.1.0-alpha01
已发布。版本 1.1.0-alpha01 包含以下提交。
版本 1.0
版本 1.0.5
2021年11月3日
androidx.compose.runtime:runtime-*:1.0.5
已发布。版本 1.0.5 包含以下提交。
错误修复
- 修复了跟踪 derivedStateOf 实例时发生的崩溃。(aosp/1792247)
版本 1.0.4
2021年10月13日
androidx.compose.runtime:runtime-*:1.0.4
已发布。版本 1.0.4 包含以下提交。
依赖项更新
- 更新为依赖于 Kotlin
1.5.31
版本 1.0.3
2021年9月29日
androidx.compose.runtime:runtime-*:1.0.3
已发布。版本 1.0.3 包含以下提交。
依赖项更新
- 更新为依赖于 Kotlin
1.5.30
版本 1.0.2
2021年9月1日
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
2021年8月4日
androidx.compose.runtime:runtime-*:1.0.1
已发布。版本 1.0.1 包含以下提交。
依赖项更新
- 更新为依赖于 Kotlin
1.5.21
。
版本 1.0.0
2021年7月28日
androidx.compose.runtime:runtime-*:1.0.0
已发布。 版本 1.0.0 包含以下提交。
1.0.0 主要功能
这是 Compose 的第一个稳定版本。请参阅官方 Compose 发布博客 获取更多详细信息!
已知问题
如果您使用的是 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)"
要解决此问题,请在您的
build.gradle
文件中临时将您的 minSdkVersion 提高到 24+。此问题将在 Android Studio Bumblebee 和 AGP7.1
的下一个版本中修复。(b/194289155)
版本 1.0.0-rc02
2021 年 7 月 14 日
androidx.compose.runtime:runtime-*:1.0.0-rc02
已发布。 版本 1.0.0-rc02 包含以下提交。
- 修复了 SnapshotStateObserver 中的竞争条件,导致间歇性出现 NullPointerException。(aosp/1763445,aosp/1758105,b/192677711)
- 修复了运行时快照导致
java.lang.IllegalStateException: Reading a state that was created after the snapshot was taken or in a snapshot that has not yet been applied
崩溃的问题。(b/193006595,b/192570897)
版本 1.0.0-rc01
2021 年 7 月 1 日
androidx.compose.runtime:runtime-*:1.0.0-rc01
已发布。 版本 1.0.0-rc01 包含以下提交。
版本 1.0.0-beta09
2021 年 6 月 16 日
androidx.compose.runtime:runtime-*:1.0.0-beta09
已发布。 版本 1.0.0-beta09 包含以下提交。
添加了配置文件规则
此版本将配置文件规则添加到以下 Compose 模块 (I14ed6)
- androidx.compose.animation
- androidx.compose.animation-core
- androidx.compose.foundation
- androidx.compose.foundation-layout
- androidx.compose.material
- androidx.compose.material-ripple
- androidx.compose.runtime
- androidx.compose.ui
- androidx.compose.ui.geometry
- androidx.compose.ui.graphics
- androidx.compose.ui.text
- androidx.compose.ui.text
- androidx.compose.ui.unit
- androidx.compose.ui.util
什么是配置文件规则?
库的配置文件规则在位于
src/main
或等效目录中的文本文件baseline-prof.txt
中指定。该文件每行指定一个规则,在这种情况下,规则是用于匹配库中方法或类的模式。这些规则的语法是用于使用adb shell profman --dump-classes-and-methods ...
时使用的可读 ART 配置文件格式的超集。这些规则采用以下两种形式之一来针对方法或类。方法规则将具有以下模式
<FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
类规则将具有以下模式
<CLASS_DESCRIPTOR>
这里
<FLAGS>
是一个或多个字符H
、S
和P
,用于指示此方法是否应被标记为“热”、“启动”或“启动后”。该
<CLASS_DESCRIPTOR>
是目标方法所属类的描述符。例如,类androidx.compose.runtime.SlotTable
的描述符为Landroidx/compose/runtime/SlotTable;
。该
<METHOD_SIGNATURE>
是方法的签名,包括方法的名称、参数类型和返回类型。例如,LayoutNode
上的方法fun isPlaced(): Boolean
的签名为isPlaced()Z
。这些模式可以包含通配符(
**
、*
和?
),以便单个规则包含多个方法或类。
规则的作用是什么?
具有标志
H
的方法表示此方法是“热”方法,应提前编译。具有标志
S
的方法表示它是在启动时调用的方法,应提前编译以避免在启动时编译和解释方法的成本。具有标志
P
的方法表示它是在启动后调用的方法。此文件中存在的类表示它在启动期间使用,应预先分配到堆中以避免类加载的成本。
它是如何工作的?
- 库可以定义这些规则,这些规则将打包在 AAR 工件中。然后,当构建包含这些工件的应用程序时,这些规则将合并在一起,并且合并后的规则用于构建特定于应用程序的紧凑二进制 ART 配置文件。然后,ART 可以利用此配置文件在应用程序安装在设备上时,提前编译应用程序的特定子集以提高应用程序的性能,尤其是在第一次运行时。请注意,这不会对可调试应用程序产生任何影响。
版本 1.0.0-beta08
2021 年 6 月 2 日
androidx.compose.runtime:runtime-*:1.0.0-beta08
已发布。 版本 1.0.0-beta08 包含以下提交。
API 更改
State<T>
现在为State<out T>
(I69049)ControlledComposition
API 更改以启用在一次重组中重组更改。(Iaafd1,b/184173932)
版本 1.0.0-beta07
2021 年 5 月 18 日
androidx.compose.runtime:runtime-*:1.0.0-beta07
已发布。 版本 1.0.0-beta07 包含以下提交。
API 更改
- 添加了新的 Compose 编译器 API,允许在源代码缩小期间删除编译器生成的源代码信息。(Ia34e6)
引入了
ReusableContent
,它将尝试重用其内容中的节点,而不是在键更改时替换它们。当键更改时,内容的插槽表中的先前值将被忽略,除了生成的节点和用于更新节点的值。引入了
ReusableComposeNode
,它将重用发出的节点,而不是像ComposeNode
那样替换它。(I1dd86)@ComposeCompilerApi
不再@RequiresOptIn
(Iab690)
错误修复
- LazyColumn/Row 现在将最多保持 2 个以前可见的项目处于活动状态(未释放),即使它们已经滚动出去了。这允许组件在我们需要合成新项目时重用活动子合成,从而提高滚动性能。(Ie5555)
版本 1.0.0-beta06
2021 年 5 月 5 日
androidx.compose.runtime:runtime-*:1.0.0-beta06
已发布。 版本 1.0.0-beta06 包含以下提交。
API 更改
@ComposeCompilerApi
不再@RequiresOptIn
(Iab690)
版本 1.0.0-beta05
2021 年 4 月 21 日
androidx.compose.runtime:runtime-*:1.0.0-beta05
已发布。 版本 1.0.0-beta05 包含以下提交。
API 更改
- 删除了
@InternalComposeApi
用于记录快照读取和写入 (Id134d)
错误修复
- ui-test-manifest 和 ui-tooling-data 中的 AndroidManifest 文件现在与 Android 12 兼容 (I6f9de,b/184718994)
版本 1.0.0-beta04
2021 年 4 月 7 日
androidx.compose.runtime:runtime-*:1.0.0-beta04
已发布。 版本 1.0.0-beta04 包含以下提交。
错误修复
在此更改之前,本地可组合函数可以根据其参数跳过。在此更改之后,没有本地可组合函数会跳过。进行此更改是因为本地函数通常且预期会捕获来自父函数的参数,并且跳过它们是错误的常见来源。
概括来说,请考虑以下示例
@Composable fun Counter(count: Int, onCountChange: (Int) -> Unit) { @Composable fun ShowCount() { Text("Count: $count") } ShowCount() Button(onClick={ onCountChange(count + 1) }) { Text("Increment") } }
在此更改之前,
ShowCount
可组合函数将始终跳过,即使在更新了count
参数之后也是如此。现在不再是这样了。(I5648a)修复了当
rememberSaveable()
与输入参数一起使用时恢复旧值的问题 (I1b110,b/182403380)
版本 1.0.0-beta03
2021 年 3 月 24 日
androidx.compose.runtime:runtime-*:1.0.0-beta03
已发布。 版本 1.0.0-beta03 包含以下提交。
API 更改
DefaultMonotonicFrameClock
已弃用。现在,在没有MonotonicFrameClock
的情况下调用withFrameNanos
或Recomposer.runRecomposeAndApplyChanges
将会抛出IllegalStateException
。(I4eb0d)
版本 1.0.0-beta02
2021 年 3 月 10 日
androidx.compose.runtime:runtime-*:1.0.0-beta02
已发布。 版本 1.0.0-beta02 包含以下提交。
错误修复
- 强制执行对实验性 API 的公共使用的限制 (I6aa29,b/174531520)
- 修复了在导航组合的目的地内部使用
rememberSaveable { mutableStateOf(0) }
时出现的问题。(I1312b,b/180042685,b/180701630)
版本 1.0.0-beta01
2021 年 2 月 24 日
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)
现在
compositionLocalOf
和staticCompositionLocalOf
的defaultFactory
是必需的,而不是可选的。此更改消除了对于未提供默认工厂的不可为空类型潜在的类型错误。以前,这将为不可为空类型提供空引用。
对于可为空类型,请考虑提供
{ null }
作为默认工厂。我们不建议使用不可为空类型的局部变量,除非可以提供合理的默认值。如果不存在合理的默认值,则
defaultFactory
lambda 应抛出异常。但是,抛出异常意味着局部变量的使用者将对其被提供存在隐式依赖关系,而类型系统并未强制执行此依赖关系。(Ifbd2a)已从 Compose 运行时中删除了已弃用的符号(I3252c)
已删除已弃用的
emptyContent()
。请改用{}
。(Idb33f,b/179432510)Providers 已重命名为 CompositionLocalProvider
- Composition 构造函数不再接受 key 参数,并且已被弃用。
- currentCompositeKeyHash 已转变为可组合的顶级属性,而不是可组合的顶级函数。
- CompositionData 和 CompositionGroup 已移至 androidx.compose.runtime.tooling 命名空间
- ComposableLambda 已成为接口而不是具体类,并且不再具有类型参数。
- ComposableLambdaN 已成为接口而不是具体类,并且不再具有类型参数。
- snapshotFlow 函数已移至 androidx.compose.runtime 命名空间
- SnapshotMutationPolicy 的 merge 方法不再是实验性的
- 已删除 @TestOnly 顶级 clearRoots 函数。它不再必要。
- 已删除 keySourceInfoOf 和 resetSourceInfo 函数。它们不再必要。
- 已删除 Composer.collectKeySourceInformation。它不再必要。
- 已删除 isJoinedKey、joinedKeyLeft 和 joinedKeyRight 方法。它们不再必要。
- 各种顶级 API 已移至不同的文件并进行了重新组织。由于 Kotlin 的文件类语义,这将破坏二进制兼容性,但不会破坏源代码兼容性,因此对于大多数用户来说应该不是问题。
- (I99b7d,b/177245490)
SnapshotStateObserver 不再是实验性的(Id2e6a)
删除了一些以前已弃用的 API(Ice5da,b/178633932)
进行了以下 Material API 更改
- 向 Top/BottomAppBar 添加了 contentPadding 参数,以允许自定义默认填充。
- 重新排序了 BackdropScaffold 中的参数,以遵循 API 指南,将必需的参数放在可选参数之前。
- 将 BottomNavigationItem 中的
icon
参数移至selected
和onClick
之后。 - 将 BottomNavigationItem 中的
alwaysShowLabels
参数重命名为alwaysShowLabel
。 - 将一些组件中的
bodyContent
参数重命名为content
。 - 重新排序了
ButtonDefaults.buttonColors()
中的参数。请注意,由于参数的类型没有更改,因此这不会导致代码中出现错误 - 请确保您要么使用命名参数,要么手动更新顺序,否则您的代码的工作方式将与以前不同。 - 向
darkColors()
添加了secondaryVariant
参数。此颜色通常与暗色主题中的secondary
相同,但出于一致性和进一步自定义的目的而添加。 - 从公共 API 表面删除了 ElevationDefaults 和 animateElevation(),因为它们不常用/有用。
- 将
Slider
中的onValueChangeEnd
重命名为onValueChangeFinished
并使其可为空。 - 将
Snackbar
中的text
参数重命名为content
以保持一致性。 - 向
DropdownMenuItem
添加了contentPadding
参数以允许自定义默认填充,并使content
成为RowScope
的扩展。 - 将
ModalDrawerLayout
重命名为ModalDrawer
。 - 将
BottomDrawerLayout
重命名为BottomDrawer
。 - (I1cc66)
版本 1.0.0-alpha12
2021 年 2 月 10 日
androidx.compose.runtime:runtime-*:1.0.0-alpha12
已发布。版本 1.0.0-alpha12 包含这些提交。
API 更改
- ViewGroup 的支持已从 UiApplier 中删除。已删除已弃用的 emitView 可组合项。(Ifb214)
- CompositionReference 重命名为 CompositionContext(I53fcb)
- ComponentActivity.setContent 已移至 androidx.activity.compose.setContent,位于 androidx.activity:activity-compose 模块中。(Icf416)
- Snapshot API 已更新,使其与 API 指南更加一致,并隐藏了公共 API 中的内部实现类。(Id9e32)
- 重命名了 Ambients 以匹配 Ambient -> CompositionLocal 的重命名。Ambients 以前命名为 AmbientFoo,现在 CompositionLocals 命名为 LocalFoo。(I2d55d)
- 分别将 Ambient 重命名为 CompositionLocal,将 ambientOf/staticAmbientOf 重命名为 compositionLocalOf/staticCompositionLocalOf。此更改有助于使 CompositionLocal 的用途更加清晰:一种为组合提供/检索局部值的机制。CompositionLocal 实例应以
Local
为前缀,例如 val LocalFoo = compositionLocalOf { Foo() }。(Ia55b6) - takeMutableSnapshot 和 takeSnapshot 已移至成为 Snapshot 的伴随方法。(I91f19)
@ComposableContract
已弃用,取而代之的是三个更具体的注释。@ComposableContract(restartable = false)
已变为@NonRestartableComposable
@ComposableContract(readonly = true)
已变为@ReadOnlyComposable
@ComposableContract(preventCapture = true)
已变为@DisallowComposableCalls
@ComposableContract(tracked = true)
已删除。(I60a9d)emptyContent() 和 (@Composable () -> Unit).orEmpty() 实用程序已弃用,因为它们不再有任何积极的性能影响或价值(I0484d)
snapshotFlow
和withMutableSnapshot
不再是实验性的(I6a45f)现在可以关闭 Recomposers。已关闭的 Recomposers 将继续重新组合,直到组合子协程完成。Recomposer.shutDown 重命名为 cancel 以与 close 相区分。(Ib6d76)
compose:runtime-dispatch
工件现已弃用。现在可以在 compose:runtime 中找到 MonotonicFrameClock,可以在 compose:ui 中找到 AndroidUiDispatcher。(Ib5c36)Compose 编译器插件目标的 API 已重构为使用接口而不是具体类。该接口也不再使用类型参数。
这是一个内部更改,不应影响源代码兼容性,但会破坏二进制兼容性。(I3b922,b/169406779)
引入了 SnapshotMutableState(Icfd03)
DisposableEffectDisposable 重命名为 DisposaleEffectResult(Ica7c6)
已删除 Recomposer.current()。[抽象]ComposeView 现在默认为延迟创建,窗口范围内的 Recomposers 由窗口的 ViewTreeLifecycleOwner 驱动。在主机 Lifecycle 停止期间,重新组合和基于 withFrameNanos 的动画刻度将暂停。(I38e11)
Recomposer.runningRecomposers 现在提供了一个全局 StateFlow,其中包含用于观察过程中正在进行的组合状态的只读 RecomposerInfo。优先使用此 API 而不是 Recomposer.current(),后者现已弃用。(If8ebe)
DisposableEffectDisposable 重命名为 DisposaleEffectResult(I3ea68)
版本 1.0.0-alpha11
2021 年 1 月 28 日
androidx.compose.runtime:runtime-*:1.0.0-alpha11
已发布。版本 1.0.0-alpha11 包含这些提交。
API 更改
- onCommit、onDispose 和 onActive 已弃用,取而代之的是 SideEffect 和 DisposableEffect API(If760e)
- emit() API 和所有重载已弃用并重命名为 ComposeNode。这些 API 具有相同的用途,只是名称不同,以便遵循 Compose 的命名约定(I4137b)
- invalidate 和 compositionReference() 现已弃用,取而代之的是 currentRecomposeScope 和 rememberCompositionReference。(I583a8)
RememberObserver 替换了 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)
错误修复
- WithConstraints 已重构为 BoxWithConstraints 并移动到 foundation.layout。(I9420b,b/173387208)
- 在测试中利用 TestCoroutineDispatcher (I532b6)
版本 1.0.0-alpha10
2021 年 1 月 13 日
androidx.compose.runtime:runtime-*:1.0.0-alpha10
已发布。版本 1.0.0-alpha10 包含以下提交。
重大更改
内部编译器 API 的重构允许将组合结果生成的节点更改批量处理到组合的“应用更改”阶段,在所有
@Composable
函数完成后。这是一个行为上的重大更改,可能会影响应用程序代码,因为在应用更改之前,内部和实验性 API 中不再可用节点。这通常可以通过将具有此类依赖项的代码包装在
SideEffect
可组合项中来解决,以延迟代码的执行,直到节点创建并初始化后。(I018da)
API 更改
- 添加了一种跟踪 recomposer 是否已应用更改的方法。(I1b3e2)
扩展 [Abstract]ComposeView API 以允许回收基于 Compose 的视图,处置其组合以稍后再次重新创建。添加用于安装和发现窗口范围 Recomposers 和 CompositionReferences 的 API 以创建子组合。
添加 ViewCompositionStrategy 用于配置 [Abstract]ComposeViews 的组合处置策略;默认行为是在窗口分离时处置。(I860ab)
错误修复
- Recomposer 现在公开其当前状态的 Flow,允许监视其活动和关联效果的活动。(Ifb2b9)
- 现在可以通过 keyEvent.nativeKeyEvent 访问本机 keyEvent (I87c57,b/173086397)
版本 1.0.0-alpha09
2020 年 12 月 16 日
androidx.compose.runtime:runtime-*:1.0.0-alpha09
已发布。版本 1.0.0-alpha09 包含以下提交。
API 更改
从公共 API 中删除了 SlotTable、SlotReader 和 SlotWriter。这些以前被标记为 InternalComposeAPI。现在它们是 compose 模块的内部内容。
CompositionData 和 CompositionGroup 作为 ui-tooling API 的替代方案添加,用于提取组合信息。这些是公开的,但不打算在 ui-tooling API 之外使用,因为它们提供了 ui-tooling API 解释的原始信息 (I31a9c)
Applier 类不再被视为 (Id85b0)
Applier
接口已更改,以便简化自下而上而不是自上而下构建树。insert()
方法已重命名为insertTopDown()
。添加了一个新方法
insertBottomUp()
。Applier 使用
insertTopDown()
或insertBottomUp()
将节点插入到它正在编辑的树中,具体取决于哪个性能更好。某些树(例如
LayoutNode
和View
)自下而上构建比自上而下构建效率更高。在此更改之前,需要一个插入堆栈来实现自下而上的构建,该堆栈需要复制到每个需要自下而上构建的 applier 中以提高性能。通过此更改,Applier
覆盖insertBottomUp()
以自下而上构建树,并覆盖insertTopDown()
以自上而下构建树。(Icbdc2)Compose 支持可以进行可组合调用的属性 getter。对这方面的支持不会消失,但将属性 getter 声明为 @Composable 的语法正在发生变化。
现在已弃用的语法是通过注释属性本身来实现的
@Composable val someProperty: Int get() = ...
现在正确的语法是通过注释属性的 getter 来实现的
val someProperty: Int @Composable get() = ...
这两种语法在一段时间内都会有效,但前者已弃用的语法最终将成为编译错误。(Id9197)
错误修复
- AndroidOwner 成为内部内容 (Ibcad0,b/170296980)
- subcomposeInto(LayoutNode) 已成为内部内容 (Id724a)
版本 1.0.0-alpha08
2020 年 12 月 2 日
androidx.compose.runtime:runtime-*:1.0.0-alpha08
已发布。版本 1.0.0-alpha08 包含以下提交。
API 更改
- 添加了针对可组合 lambda 参数命名和位置的 lint 检查,以检查与 Compose 指南的一致性。此外,根据 lint 检查和指南,将一些使用
children
作为其尾随 lambda 名称的 API 迁移到content
。(Iec48e) - Recomposer 不再接受 EmbeddingContext;所需的调度依赖项是从 effectCoroutineContext 获取的。FrameManager 已弃用;平台集成应初始化自己的全局快照处理。(I02369)
- RestorableStateHolder.withRestorableState 函数已重命名为 RestorableStateProvider (I66640)
错误修复
- 已弃用以
Ambient
作为后缀命名的 Ambients,并用以 Ambient 为前缀的新属性替换它们,遵循其他 Ambients 和 Compose API 指南。(I33440) - 删除旧的 ui-test 模块及其存根 (I3a7cb)
版本 1.0.0-alpha07
2020 年 11 月 11 日
androidx.compose.runtime:runtime-*:1.0.0-alpha07
已发布。版本 1.0.0-alpha07 包含以下提交。
新功能
API 更改
@UnionType
注释已弃用 (I57cde)- 提供默认值已作为提供环境的替代方法添加,它可以用于指定仅在尚未提供环境值时才会设置的环境值。(Id6635,b/171024925)
- LaunchedTask 已重命名为 LaunchedEffect 以与 SideEffect 和 DisposableEffect API 保持一致。不允许使用没有主题参数的 LaunchedEffect,以鼓励最佳实践。(Ifd3d4)
- Applier 现在具有 onBeginChanges/onEndChanges 回调,当 Composer 开始/完成将更改应用于树时会调用这些回调。如果需要,这些可用于批处理资源管理。(Icf476)
- Recomposer 现在在构造时需要 CoroutineContext (Ic4610)
- 对内部 SlotTable 实现的更改,不应影响公共 API。(If9828)
- 已删除未采用初始值的 rxjava2 适配器 (Idb72f)
错误修复
- foundation.Text 已弃用,并替换为 material.Text。有关不使用主题中的值的简单、无意见的文本 API,请参阅 androidx.compose.foundation.BasicText。(If64cb)
- BaseTextField 已弃用。请改用 BasicTextField。(I896eb)
- 一些与布局相关的符号已从 androidx.compose.ui 移动到 androidx.compose.layout.ui。(I0fa98,b/170475424)
外部贡献
- 为 compose 添加了
runtime-rxjava3
模块。类似于runtime-rxjava2
(I02cbf)
版本 1.0.0-alpha06
2020 年 10 月 28 日
androidx.compose.runtime:runtime-*:1.0.0-alpha06
已发布。版本 1.0.0-alpha06 包含以下提交。
API 更改
- Recomposer 现在是 CompositionReference 和有效的组合父级。现在在更少的地方需要显式 Recomposer。(I4036f)
- 为 SideEffect 添加了 DisposableEffect 对应 API,它扮演着 onCommit-with-params 的角色,但需要 onDispose。
- 添加了 rememberUpdatedState API 以将数据从重新组合发布到正在进行或长期存在的进程(例如 DisposableEffects 或 LaunchedTasks)。
- (Id50b9)
- MutableVector 现在实现了 RandomAccess (I85d73,b/170461551)
- 添加了 SideEffect 可组合项,用于将组合的副作用应用于组合管理的对象。SideEffect 用于替换 onCommit 可组合项。(Ia77c2)
- 新的实验性 api RestorableStateHolder。它允许在处置子树之前保存使用 [savedInstanceState] 和 [rememberSavedInstanceState] 定义的状态,以便下次能够使用恢复的状态对其进行组合。(I66884,b/166586419)
错误修复
- 在 ComposeTestRule 中启用过渡;从 ComposeTestRule 中删除启用闪烁光标的选项。(If0de3)
版本 1.0.0-alpha05
2020 年 10 月 14 日
androidx.compose.runtime:runtime-*:1.0.0-alpha05
已发布。版本 1.0.0-alpha05 包含以下提交。
API 更改
- 实验性 Modifier.pointerInput 悬挂输入修饰符 (Ia77d2)
- LazyColumn/Row 的滚动性能通过减少每次滚动时子合成中的工作量得到改进。为 Composition 类添加了新的 hasInvalidations() 方法。Recomposer 中的 hasPendingChanges() 方法重命名为 hasInvalidations() (Ib2f32,b/168293643,b/167972292,b/165028371)
- 添加 produceState API,用于从合成中启动协程,这些协程会随着时间的推移更新单个
State<T>
值 (Id4a57) - launchInComposition 重命名为 LaunchedTask,以符合 Compose API 指南 (I99a8e)
- 自定义布局中 place() 调用的顺序现在定义了子元素的绘制顺序 (Ibc9f6)
版本 1.0.0-alpha04
2020年10月1日
androidx.compose.runtime:runtime-*:1.0.0-alpha04
已发布。 版本 1.0.0-alpha04 包含这些提交。
API 更改
- 添加了 OwnerScope,以便在布局和绘制观察范围不再有效时收集它们。 (Ic4cf8)
- 添加了 derivedStateOf API,用于基于可能读取(并派生自)其他 State 对象的计算创建 State 对象 (If758b)
- 为 SnapshotStateObserver 添加了 TestOnly API (I6e2a9)
错误修复
- foundation.Box 已弃用。请改用 foundation.layout.Box。 (Ie5950,b/167680279)
版本 1.0.0-alpha03
2020年9月16日
androidx.compose.runtime:runtime-*:1.0.0-alpha03
已发布。 版本 1.0.0-alpha03 包含这些提交。
API 更改
CompositionCoroutineScope
不再实现MonotonicFrameClock
。调用withFrameNanos
的用户应显式导入顶级函数。 (Icb642,b/166778123)
错误修复
- 诸如
onNode
或waitForIdle
之类的全局测试函数现已弃用,请迁移到在 ComposeTestRule 上定义的新对应函数 (I7f45a) launchInComposition
不再以未分派的方式启动协程 (Ief6af,b/166486000)
版本 1.0.0-alpha02
2020年9月2日
androidx.compose.runtime:runtime-*:1.0.0-alpha02
已发布。 版本 1.0.0-alpha02 包含这些提交。
API 更改
- 添加
snapshotFlow
和withMutableSnapshot
API,用于使用和生成 Snapshot 数据更改。 (I3e722) 可组合函数的调用约定已更改。这是一个二进制破坏性更改。所有库都必须重新编译才能与此版本的 Compose 编译器插件一起使用。
此更改不会创建源代码级别的破坏性更改,因为唯一更改的 API 是具有显式选择加入的编译器 API。 (I7afd2,b/158123185)
从 EmbeddingContext 中删除了调度方法 (I7b9be)
onPreCommit 已弃用;onCommit 现在具有 onPreCommit 的行为。
onCommit 和 onActive 现在在合成更改提交的同一协调器帧中运行,而不是在下一个协调器帧的开头运行。 (I70403)
版本 1.0.0-alpha01
2020年8月26日
androidx.compose.runtime:runtime-*:1.0.0-alpha01
已发布。 版本 1.0.0-alpha01 包含这些提交。
版本 0.1.0-dev
版本 0.1.0-dev17
2020年8月19日
androidx.compose.runtime:runtime-*:0.1.0-dev17
已发布。 版本 0.1.0-dev17 包含这些提交。
API 更改
- 自定义发射现在可以声明其一个或多个设置器可以跳过并独立于发射重新组合。 (Ibbd13)
删除了已弃用的 FrameManager 调用。
内部 Compose API 已更改,以减少跟踪诸如
mutableStateof()
之类的状态对象的开销 (I80ba6)可组合的
state { ... }
现在已弃用,建议改为显式调用remember { mutableStateOf(...) }
以提高清晰度。这减少了整体 API 表面积和状态管理的概念数量,并与类属性委托的by mutableStateOf()
模式相匹配。 (Ia5727)Flow.collectAsState 现在从合成本身确定默认调度程序,而不是默认为 Dispatchers.Main。 (I9c1d9)
修复了在 for 循环内部使用保存状态的内容时发生的崩溃。现在允许在 savedInstanceState() 中使用相同的键,UiSavedStateRegistry 的 API 现在已调整为满足此新要求 (I4ab76,b/160042650,b/156853976,b/159026663,b/154920561)
错误修复
emitView
已弃用。如果可能,请改用AndroidView
在 Compose 中发射 View。请注意,将来不支持直接组合 View 和 ViewGroup,除非这些是合成树中的叶子,在这种情况下可以使用 AndroidView 实现。 (I29b1e,b/163871221)
版本 0.1.0-dev16
2020年8月5日
androidx.compose.runtime:runtime-*:0.1.0-dev16
已发布。 版本 0.1.0-dev16 包含这些提交。
API 更改
mutableStateOf()
、ambientOf()
和savedInstanceStateOf()
的默认变异策略已更改为structuralEqualityPolicy()
,而不是referentialEqualityPolicy()
。现在,决定是否将分配给
mutableStateOf()
实例的新值视为更改的默认值默认为使用==
,而不是使用===
。请参阅 https://kotlinlang.org/docs/reference/equality.html
ambientOf()
和savedInstanceStateOf()
在其实现中使用mutableStateOf()
,因此它们已更改为与mutableStateOf()
保持一致。使用结构相等性更符合开发人员的预期。
例如,
val state = mutableStateOf(1f)
随后,
state.value = 1f
将不再被视为对
state
的更改,并且在合成期间使用state
将不再需要重新组合。这是一个破坏性更改,但在大多数情况下(例如,当使用未覆盖
equals()
的类时),这不会对应用程序产生明显影响。覆盖
equals()
的类(例如data
类)可能会看到性能下降,因为现在默认情况下,在分配给mutableStateOf()
时会调用其equals()
方法。可以通过向对
mutableStateOf()
、ambientOf()
和savedInstanceStateOf()
的调用添加策略参数policy = referentialEqualityPolicy()
来恢复以前的 behavior。 (Ic21a7)Row
和Column
现在是内联函数,大大减少了使用它们的开销。 (I75c10)
错误修复
- setViewContent 已弃用。应改用 setContent。 (I7e497,b/160335130)
添加了 MonotonicFrameAnimationClock,它使您可以将 MonotonicFrameClock 用作 AnimationClockObservable,以弥合基于新协程的时钟和仍然使用旧的基于回调的时钟的 API 之间的差距。
ManualAnimationClock 的 MonotonicFrameClock 等效项现在是 ManualFrameClock。 (I111c7,b/161247083)
Modifier.stateDraggable 已完全重做并重命名为 Modifier.swipeable。引入了新的 SwipeableState 类,并且 DrawerState 和 BottomDrawerState 已重构为继承自它。[Modal/Bottom]DrawerLayout 不再采用 onStateChange 参数。 (I72332,b/148023068)
Modifier.plus 已弃用,请改用 Modifier.then。'Then' 有更强的顺序信号,同时还禁止键入
Modifier.padding().background() + anotherModifier
,这会破坏链并难以阅读 (Iedd58,b/161529964)添加了 SubcomposeLayout。它是一个低级原语,允许在测量过程中组合子元素,如果我们想使用仅在稍后测量期间可用于子树合成的某些值。例如,WithConstraints 不是使用 SubcomposeLayout 实现的。 (I25cc8)
Material FilledTextField 重命名为 TextField,基础 TextField 重命名为 BaseTextField,以便轻松发现和使用最简单的所需 API (Ia6242,b/155482676)
Modifier.drawBackground 已重命名为 Modifier.background (I13677)
版本 0.1.0-dev15
2020年7月22日
androidx.compose.runtime:runtime-*:0.1.0-dev15
已发布。 版本 0.1.0-dev15 包含这些提交。
依赖项更新
- 要使用 Compose 的
0.1.0-dev15
版本,您需要根据上面 声明依赖项 中显示的新代码片段更新您的依赖项。
API 更改
@Model
注解现已弃用。使用 state 和 mutableStateOf 作为替代方案。经过多次仔细讨论后,做出了弃用决定。理由
基本原因包括但不限于
- 减少我们需要教授的 API 表面积和概念
- 更贴近其他类似工具包(Swift UI、React、Flutter)
- 可逆决策。我们随时可以稍后恢复
@Model
。 - 删除了极端情况下的用法以及关于配置
@Model
的难以回答的问题,作为我们需要处理的事情 @Model
数据类、equals、hashcode 等。- 如何让某些属性“被观察”而其他属性不被观察?
- 如何指定在观察中使用的结构相等性与引用相等性?
- 减少系统中的“魔术”。将降低某人假设系统比实际更智能(即,它知道如何对列表进行差异化)的可能性
- 使观察的粒度更直观。
- 改进从变量到类属性的可重构性
- 潜在地为进行手工制作的状态特定优化打开了可能性
- 更紧密地与生态系统的其余部分保持一致,并减少对不可变或我们“拥抱可变状态”的歧义
迁移说明
几乎所有现有的
@Model
用法都可以通过两种方式之一轻松地转换。以下示例包含一个带有两个属性的@Model
类(仅出于示例目的),并在一个可组合函数中使用它。@Model class Position( var x: Int, var y: Int ) @Composable fun Example() { var p = remember { Position(0, 0) } PositionChanger( position=p, onXChange={ p.x = it } onYChange={ p.y = it } ) }
替代方案 1:使用
State<OriginalClass>
并创建副本。Kotlin 的数据类使这种方法更容易。本质上,将所有以前是
var
属性的属性转换为数据类的val
属性,然后使用state
代替remember
,并将状态值分配给使用数据类copy(...)
便利方法克隆的原始副本。需要注意的是,这种方法仅在对该类的所有修改都在创建
State
实例的相同作用域中完成时才有效。如果该类在使用范围之外内部自行修改,并且您依赖于对它的观察,那么您将需要使用下一种方法。data class Position( val x: Int, val y: Int ) @Composable fun Example() { var p by state { Position(0, 0) } PositionChanger( position=p, onXChange={ p = p.copy(x=it) } onYChange={ p = p.copy(y=it) } ) }
替代方案 2:使用 mutableStateOf 和属性委托
Kotlin 的属性委托和
mutableStateOf
API 使这种方法更容易,它允许您在组合之外创建 MutableState 实例。本质上,用mutableStateOf
作为其属性委托的var
属性替换原始类中的所有var
属性。这具有类用法完全不会改变的优点,只有其内部实现会改变。但是,行为与原始示例并不完全相同,因为现在每个属性都是单独观察/订阅的,因此在此重构后看到的重新组合可能更窄(这是一件好事)。class Position(x: Int, y: Int) { var x by mutableStateOf(x) var y by mutableStateOf(y) } // source of Example is identical to original @Composable fun Example() { var p = remember { Position(0, 0) } PositionChanger( position=p, onXChange={ p.x = it } onYChange={ p.y = it } ) }
(I409e8, b/152050010, b/146362815, b/146342522, b/143413369, b/135715219, b/143263925, b/139653744)
更改了 Compose 编译器的代码生成策略。在更改之前,Compose 编译器会转换对可组合函数的调用。通过此更改,我们现在转换可组合函数的主体,并保持调用站点不变(大部分)。
这意味着大部分与 Compose 运行时通信的逻辑发生在函数体开头,而不是在调用站点。
对于所有 Compose 用法,这应该是一个源代码兼容的更改。大多数 Compose 用户无需因此更改而更新任何代码。
为了支持这项工作,所有可组合函数的 JVM 签名都已更改。接受单个参数的可组合函数被转换为接受 3 个参数的函数,这些附加参数是 Composer、一个“键”整数和一个用于通过调用传播元数据的位掩码整数。
Compose 现在还转换可组合函数的默认参数。它在不引入函数本身的额外合成默认重载的情况下执行此操作,因此此更改将导致定义的函数更少。
由此导致的已知有意行为更改
- 某些调用将在以前不会跳过的地方跳过
- 默认参数表达式中的可组合表达式现在已正确订阅和处理
这项工作包含一些优化:1. 参数比较的结果会传播到调用图中的其他可组合函数。这将导致运行时减少比较次数,减少插槽表大小,以及更多以前未跳过的可组合函数的跳过。2. 在编译时确定为“静态”的参数不再进行比较或存储在运行时。这减少了比较次数并减少了插槽表大小。3. 函数体的控制流结构用于最大程度地减少生成的组数。这减少了插槽表大小,并减少了运行时的工作量。4. 如果函数体内部未使用函数的未用分派和接收器参数,则它们不包含在确定函数的可跳过性中。
大多数重大更改都是针对编译器直接定位的 API,而 Compose 的典型用法不会受到影响:1. Composer::startExpr 已移除。2. Composer::endExpr 已移除。3. Composer::call 已弃用。4.
key
的非可变参数重载已被移除。将来请使用vararg
版本。5. Pivotal 注解已弃用。使用key
作为替代。6. ScopeUpdateScope::updateScope 已更改为期望 Function3 而不是 Function1。7. restartableFunction 和 restartableFunctionN 已更新为包含其他编译时参数 (I60756, b/143464846)向 MutableVector 添加了 sortWith 和 removeRange (Icccf7)
为 CompositionLifecycleObserver 添加了默认方法实现 (I24289)
Applier 现在需要一个 clear() 方法来处理组合 (Ibe697)
向 MutableVector 添加了 asMutableList(),以便可以将其传递给公共 API,而无需复制整个列表。 (I298df)
添加了 rememberCoroutineScope(),以便在组合中获取受管理的 CoroutineScope,以响应事件启动作业。 (I0e264)
MutableVector 是一个新的集合,它没有实现任何标准的 Collection 接口。此集合提供的速度高于其他要求,并且仅供内部实现使用。 (I8ebd6)
暂时删除了
StableMutableList
和StableMutableMap
,以避免 Kotlin Compose 所需版本中的问题。一旦 Compose 更新到不出现此问题的 Kotlin 版本,这些接口将重新引入。SnapshotStateList
和SnapshotStateMap
现在是公开的,但一旦恢复StableMutableList
和StableMutableMap
,它们将被弃用。 (Ia7769)添加顶级 withFrameNanos 函数用于动画计时 (Ie34c5)
@Untracked 注解已弃用。替换为 @ComposableContract(tracked=false) (Id211e)
RestartableFunction 和相关 API 已重命名为 ComposableLambda 等。这些 API 仅由编译器定位,因此通常不会影响源代码级别的兼容性。重命名主要是为了更好地传达此类在堆栈跟踪中出现时的含义 (I7eb25)
@Composable 注解在类上不再有效 (Ia5f02)
Ambient<T>
现在是 @Stable 而不是 @Immutable (I0b4bb)在此更改之前,Compose 编译器插件会在 @Composable 函数内非平凡地拦截对构造函数的调用,如果存在 (I5205a, b/158123804)
Recompose 可组合函数不再是有用的抽象。大多数重新组合应该作为 MutableState 赋值的结果发生。对于超出此范围的任何内容,建议您使用
invalidate
函数来触发当前作用域的重新组合。 (Ifc992)Observe 不再是有用的抽象。如果您需要复制它,可以通过创建一个执行可组合 lambda 参数的可组合函数来复制其实现。例如,
@Composable fun Observe(body: @Composable () -> Unit) = body()
(I40d37)@Direct 已弃用,取而代之的是 @ComposableContract(restartable=false) (If4708)
添加了对最近引入的 StateFlow 的适配器,它允许我们预填充初始值,以便返回的状态是非空的 (I61dd8, b/156233789)
添加了对 Flow 的适配器。用法示例:val value by flow.collectAsState() (If2198, b/153375923)
[Mutable]State 属性委托运算符已移动到扩展函数中,以支持 Kotlin 1.4 属性委托优化。调用者必须添加导入才能继续使用
by state { ... }
或by mutableStateOf(...)
。 (I5312c)androidx.compose.ViewComposer 已移动到 androidx.ui.node.UiComposer androidx.compose.Emittable 已移除。它与 ComponentNode 重复。androidx.compose.ViewAdapters 已移除。它们不再是受支持的用例。Compose.composeInto 已弃用。请改用
setContent
或setViewContent
。Compose.disposeComposition 已弃用。请改用setContent
返回的Composition
上的dispose
方法。androidx.compose.Compose.subcomposeInto 已移动到 androidx.ui.core.subcomposeInto ComponentNode#emitInsertAt 已重命名为 ComponentNode#insertAt ComponentNode#emitRemoveAt 已重命名为 ComponentNode#removeAt ComponentNode#emitMode 已重命名为 ComponentNode#move (Idef00)更新了
ComposeFlags.COMPOSER_PARAM
标志使其为true
,这将更改 Compose 插件的代码生成策略。从高层次来看,这会导致 @Composable 函数生成一个额外的合成参数,该参数将传递给后续的 @Composable 调用,以便运行时能够正确地管理执行。这是一个重大的二进制破坏性更改,但是,应该在所有经过批准的 Compose 用法中保留源代码级别的兼容性。 (I7971c)对 Ambient API 的重大更改。有关详细信息,请参阅日志和
Ambient<T>
文档 (I4c7ee, b/143769776)添加了 ui-livedata - 一个新的工件,其中包含 LiveData 的适配器。用法示例:val value by liveData.observeAsState() (Ie9e8c, b/150465596)
没有显式初始值的 Rx 适配器已弃用。使用 null 不总是最佳默认值,例如,当您有 List 时,最好以 emptyList() 或任何其他合理的默认值开始 (I00025, b/161348384)
添加了 ui-rxjava2 - 一个新的工件,其中包含 RxJava2 的适配器。用法示例:val value by observable.subscribeAsState() (Ifab4b, b/153369097)
现在可以使用可空类型与
savedInstanceState()
一起使用(I6847f,b/153532190)新的 listSaver() 和 mapSaver() 使编写自定义 Saver 对象变得更加容易(I8cf68,b/152331508)
新增函数:savedInstanceState() 和 rememberSavedInstanceState()。它们类似于 state() 和 remember(),但内置了保存实例状态的支持(If1987,b/152025209)
错误修复
runOnIdleCompose
重命名为runOnIdle
(I83607)- 将 LayoutNode 设为实验性 API(I4f2e9)
- androidx.ui.foundation.TextFieldValue 和 androidx.ui.input.EditorValue 已弃用。使用该类型的 TextField、FilledTextField 和 CoreTextField 可组合项也已弃用。请改用 androidx.ui.input.TextFieldValue(I4066d,b/155211005)
- 删除了已弃用的 DrawBackground API,转而使用 Modifier 上的 drawBackground 扩展 API。重构了颜色、画刷和绘制背景的实现,以减少代码路径,并删除了 Modifier 必须作为组合的一部分创建的要求。(I0343a)
- 更新了公开 Canvas 的更高级别的 Compose API,以公开 CanvasScope。这消除了使用者维护自己的 Paint 对象的需要。对于仍然需要访问 Canvas 的使用者,可以使用 drawCanvas 扩展方法,该方法提供一个回调来使用底层 Canvas 发出绘图命令。(I80afd)
- WithConstraints 尾随 lambda API 已更改。现在,它不再具有两个参数,而是具有一个接收器作用域,除了约束和布局方向外,它还在 Dp 中提供了 minWidth、maxWidth、minHeight 和 maxHeight 属性(I91b9a,b/149979702)
- 添加了对称填充修饰符。(I39840)
- 更新了 wrapContentWidth 和 wrapContentHeight 以期望垂直或水平对齐方式,而不是任何对齐方式。gravity 修饰符已更新为接受垂直或水平对齐方式。Row、Column 和 Stack 已更新为支持自定义连续对齐方式。(Ib0728)
- ui-text 模块重命名为 ui-text-core(I57dec)
- 改进 DrawModifier API
- 使 draw() 的接收器作用域成为 ContentDrawScope
- 删除了 draw() 上的所有参数
- DrawScope 与以前的 CanvasScope 具有相同的接口
- ContentDrawScope 具有 drawContent() 方法(Ibaced,b/152919067)
- ColoredRect 已弃用。请改用
Box(Modifier.preferredSize(width, height).drawBackground(color))
。(I499fa,b/152753731) - 将 Modifier 加号运算符替换为工厂扩展函数(I225e4)
- RowScope 和 ColumnScope 成员现在可以在 Row 和 Column 之外访问。(I3a641)
- 将 LayoutFlexible 重命名为 LayoutWeight。将 tight 参数重命名为 fill。(If4738)
- WithConstraints 获取了 LayoutDirection 参数(I6d6f7)
- 将 background 重命名为 DrawBackground,并使其默认情况下被记忆(Ia0bd3)
- 将 ButtonStyle 替换为不同的函数,并删除了文本(字符串)重载。有关用法信息,请参阅更新后的示例。(If63ab,b/146478620,b/146482131)
runOnIdleCompose
和runOnUiThread
现在是全局函数,而不是 ComposeTestRule 上的方法。(Icbe8f)
外部贡献
- 删除 Compose 运行时移植层中不需要的 API,例如 Looper 和 Handler(I6847d)
- 不带初始值的
Flow<T>.collectAsState()
已弃用。请改用StateFlow<T>
或传递显式初始值。(I63f98,b/157674865)