Compose Runtime

Compose 编程模型和状态管理的基本构建块,以及 Compose 编译器插件的目标核心运行时。
最近更新时间 稳定版 候���版 Beta 版 Alpha 版
2026 年 3 月 25 日 1.10.6 - 1.11.0-beta02 -

结构

Compose 由 androidx 中的 7 个 Maven 组 ID 构成。每个组都包含一套特定用途的功能,并各有专属的版本说明。

下表介绍了各个组的内容,点击链接即可查看其版本说明。

说明
compose.animation在 Jetpack Compose 应用中构建动画,丰富用户体验。
compose.compiler借助 Kotlin 编译器插件,转换 @Composable functions(可组合函数)并启用优化功能。
compose.foundation使用现成可用的构建块编写 Jetpack Compose 应用,还可扩展 Foundation 以构建您自己的设计系统元素。
compose.material使用现成可用的 Material Design 组件构建 Jetpack Compose UI。这是更高层级的 Compose 入口点,旨在提供与 www.material.io 上描述的组件一致的组件。
compose.material3使用 Material Design 3(新一代 Material Design)组件构建 Jetpack Compose UI。Material 3 中包括了更新后的主题和组件,以及动态配色等 Material You 个性化功能,旨在与新的 Android 12 视觉风格和系统界面相得益彰。
compose.runtimeCompose 编程模型和状态管理的基本构建块,以及 Compose 编译器插件的目标核心运行时。
compose.ui与设备互动所需的 Compose UI 的基本组件,包括布局、绘图和输入。

声明依赖项

如需添加 Compose 的依赖项,您必须将 Google Maven 制品库添加到项目中。如需了解详情,请参阅 Google 的 Maven 制品库

在应用或模块的 build.gradle 文件中添加所需工件的依赖项:

Groovy

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

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.15"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Kotlin

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

android {
    buildFeatures {
        compose = true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.15"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

如需详细了解依赖项,请参阅添加 build 依赖项

反馈

您的反馈将帮助我们改进 Jetpack。如果您发现了新问题,或对此库有任何改进建议,请告诉我们。创建新问题前,请先查看此库中的现有问题。您可以点击星标按钮,为现有问题投票。

创建新问题

如需了解详情,请参阅问题跟踪器文档

Runtime Tracing 版本 1.7

版本 1.7.0-rc01

2024 年 9 月 18 日

发布了 androidx.compose.runtime:runtime-tracing:1.7.0-rc01。版本 1.7.0-rc01 中包含这些提交内容

Runtime Tracing 版本 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 中包含这些提交内容。

bug 修复

  • 将依赖项固定到最低受支持的稳定版本(即 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 中包含这些提交内容

新功能

  • 与最新版本的基准测试和 Perfetto 跟踪兼容,支持在应用启动时(冷启动)进行合成跟踪,例如在 AndroidX 基准测试和 Android Studio 中(从 Hedgehog Beta 2 开始)。

API 变更

  • androidx.tracing.perfetto.Trace 已重命名为 androidx.tracing.perfetto.PerfettoSdkTrace。(I44af8)
  • 使跟踪 Perfetto SDK API 与 android.os.Trace 保持一致。(I73ba0b/282199917
  • 在应用启动时进行跟踪的前提条件。(Iad890)
  • 合并了实验性 API 文件和公共 API 文件(I0f2e1b/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.11

版本 1.11.0-beta02

2026 年 3 月 25 日

发布了 androidx.compose.runtime:runtime-*:1.11.0-beta02。版本 1.11.0-beta02 包含这些提交内容

bug 修复

  • 修复了 WASM 中身份哈希代码始终返回 0 的问题 (I9d70c)
  • 修复了以下问题:当嵌套派生状态的依赖项发生更改时,父派生状态可能无法正确失效(Ia7981b/481750019
  • 修复了 LinkTable 中的一个问题,该问题可能会导致在处置合成后出现无效写入。(I5c97a)
  • 修复了 LinkTable 中的一个问题,该问题可能会导致在复制操作期间调整表大小时出现无效写入 (Ie7edf)
  • 修复了 LinkTable 中错误更新节点存储值的问题 (I58a4a)
  • LinkTable 现在初始化为较小的容量,这可防止在堆大小较小的设备上创建许多子合成时出现 OOM 错误 (I112b9)

版本 1.11.0-beta01

2026 年 3 月 11 日

发布了 androidx.compose.runtime:runtime-*:1.11.0-beta01。版本 1.11.0-beta01 中包含这些提交内容

API 变更

bug 修复

  • 修复了可暂停的组合中“Apply is called on deactivated node”崩溃问题(I880c0b/484300733
  • 修复了 LinkTable 中的一个问题,该问题可能会在使用 MovableContent 时导致 ArrayIndexOutOfBoundsExceptions 或元数据损坏。(I8452b)
  • 修复了 LinkTable 中阻止正确填充诊断跟踪记录的问题 (I59868)
  • 修复了新 SlotTable 中的一个问题,即 MovableContent 中使用的 RememberObservers 在移除时可能会导致 OutOfMemoryError/infinite 循环。(I884e7)

版本 1.11.0-alpha06

2026 年 2 月 25 日

发布了 androidx.compose.runtime:runtime-*:1.11.0-alpha06。版本 1.11.0-alpha06 中包含这些提交内容

版本 1.11.0-alpha05

2026 年 2 月 11 日

发布了 androidx.compose.runtime:runtime-*:1.11.0-alpha05。版本 1.11.0-alpha05 中包含这些提交内容

API 变更

  • ComposeRuntimeFlags.isMovingNestedMovableContentEnabled(一种运行时功能标志)已被移除。(I3ee62b/455588848
  • HostDefaultKeyopen class 转换为 interface。这样,键就可以实现多种查找机制(例如 ViewTreeHostDefaultKey),而不会受到单类继承的限制,从而提高自定义托管环境的扩展性。(I917a2)
  • HostDefaultProviderLocalHostDefaultProvider 现在为 public,允许自定义托管环境为特定于平台的语言区域定义值。(I5bdbe)

bug 修复

  • 消除了在两个线程上同时运行两个 snapshotFlow 时发生死锁的可能性。(Ib4339)
  • 修复了链接表中的一个问题,该问题可能会导致工具忽略层次结构中的可组合项并错误地链接子组合 (I7178e)

外部贡献

  • 修复了在 produceState 块中使用一元运算符修改值时出现的 Lint 误报问题 (I1c7c9)

版本 1.11.0-alpha04

2026 年 1 月 28 日

发布了 androidx.compose.runtime:runtime-*:1.11.0-alpha04。版本 1.11.0-alpha04 中包含这些提交内容

API 变更

  • 我们重写了 SlotTable,这是 Compose 运行时用于跟踪您的组合层次结构、确定由重组引起的更改以及存储记忆值的内部数据结构。此重写旨在提高重组性能,主要通过使用比间隙缓冲区 SlotTable 少得多的内存复制操作来实现。与之前的 SlotTable 相比,对组合层次结构进行某些更改(例如重新排序长长的项列表)可以使重新组合的速度提高一倍以上。在新的 SlotTable 实现方案下,大多数其他操作的重组速度大约快了 10%。运行时使用的 SlotTable 实现会影响所有可组合方法,并且不需要重新编译。使用新的 SlotTable 会导致应用范围内的更改,包括依赖项。
  • SlotTable 实现目前默认处于停用状态,可以通过将 ComposeRuntimeFlags.isLinkBufferComposerEnabled 设置为 true 来启用。
  • 在启用了缩减功能的发布 build 中,此值在运行时随附的默认 proguard-rules.pro 文件中被假定为 false。如需在生产环境中启用新的 SlotTable,需要在应用的 proguard-rules.pro 文件中将此假设更改为 true。如需了解详情,请参阅有关 ComposeRuntimeFlags.isLinkBufferComposerEnabled 的文档。(Ib741db/268366116

新功能

  • 添加了 compositionLocalWithHostDefaultOf,������性允许定义 CompositionLocals,这些 CompositionLocals 会回退到宿主环境(例如 Android View 标记)以获取其默认值。(I15b81)

bug 修复

  • 确保 Snapshot.sendApplyNotifications 调用在发送必要的应用通知之前无法返回。(I95f20b/418800424
  • 防止在运行时缺少来源信息的情况下,来源信息堆栈轨迹降级为组键。(If3712)
  • 引入 ComposeToolingFlags。这些标志旨在成为永久标志(与 ComposeRuntimeFlags 相反),用于对性能有重大影响的工具功能。(I87863)

外部贡献

  • 新增了实验性 RecomposerInfo#errorState API (I0decc)
  • FunctionKeyMeta 注释的 AnnotationRetention 更改为“BINARY”(I53495)

版本 1.11.0-alpha03

2026 年 1 月 14 日

发布了 androidx.compose.runtime:runtime-*:1.11.0-alpha03。版本 1.11.0-alpha03 包含这些提交内容

API 变更

  • 引入了 SnapshotFlowManager 类,并向 snapshotFlow 添加了可选的 SnapshotFlowManager 参数,让用户能够优化注册的快照应用观测器数量。(I6289bb/446746211

bug 修复

  • 为可移动内容插入添加了轨迹注释 (Ibf176)

版本 1.11.0-alpha02

2025 年 12 月 17 日

发布了 androidx.compose.runtime:runtime-*:1.11.0-alpha02。版本 1.11.0-alpha02 中包含这些提交内容

API 变更

外部贡献

  • 修复了实时编辑功能无法从错误中恢复的 bug。(Ieb34f)

版本 1.11.0-alpha01

2025 年 12 月 3 日

发布了 androidx.compose.runtime:runtime-*:1.11.0-alpha01。版本 1.11.0-alpha01 中包含这些提交内容

API 变更

  • RetainedValuesStore.getExitedValueOrDefault 已重命名为 consumeExitedValueOrDefaultc7a0929
  • 移除了实验性并发重组 API。(c8af15d)

版本 1.10

版本 1.10.6

2026 年 3 月 25 日

发布了 androidx.compose.runtime:runtime-*:1.10.6。版本 1.10.6 中包含这些提交内容

bug 修复

  • 修复了可暂停组合中的“如果重用是由其他组引起的,则无法从根停用重用”崩溃问题(I474b5b/488433633
  • 修复了可暂停的组合中“Apply is called on deactivated node”崩溃问题(I880c0b/484300733

版本 1.10.5

2026 年 3 月 11 日

发布了 androidx.compose.runtime:runtime-*:1.10.5。版本 1.10.5 中包含这些提交内容

版本 1.10.4

2026 年 2 月 25 日

发布了 androidx.compose.runtime:runtime-*:1.10.4,该版本与 1.10.3 相比没有变化。版本 1.10.4 中包含这些提交内容

版本 1.10.3

2026 年 2 月 11 日

发布了 androidx.compose.runtime:runtime-*:1.10.3。版本 1.10.3 中包含这些提交内容

版本 1.10.2

2026 年 1 月 28 日

发布了 androidx.compose.runtime:runtime-*:1.10.2。版本 1.10.2 中包含这些提交内容

版本 1.10.1

2026 年 1 月 14 日

发布了 androidx.compose.runtime:runtime-*:1.10.1。版本 1.10.1 中包含这些提交内容

版本 1.10.0

2025 年 12 月 3 日

发布了 androidx.compose.runtime:runtime-*:1.10.0。版本 1.10.0 中包含这些提交内容

版本 1.10.0-rc01

2025 年 11 月 19 日

发布了 androidx.compose.runtime:runtime-*:1.10.0-rc01。版本 1.10.0-rc01 中包含这些提交内容

bug 修复

版本 1.10.0-beta02

2025 年 11 月 5 日

发布了 androidx.compose.runtime:runtime-*:1.10.0-beta02。版本 1.10.0-beta02 中包含这些提交内容

API 变更

  • 我们进行了一些不兼容 API 的更改,以简化 RetainedValuesStore 的安装和管理。对 retainRetainedEffect 的现有调用不受影响,但任何自定义 RetainedValuesStore 都需要迁移才能与此版本兼容。(If3c2fb/451921682b/450539803

  • RetainedValuesStore 不再公开用于启动/停止保留的低级别 API。保留状态现在会自动随内容而变。LocalRetainedValuesStoreProvider 现在提供安装 RetainedValuesStore 的选项。不应直接提供 LocalRetainedValuesStore。如需详细了解这些变更,请参阅更新后的文档和示例。

  • RetainedValuesStoreProvider 重命名为 RetainedValuesStoreRegistry。此类现在仅公开用于安装和管理组合中的 RetainedValuesStore 的 API。

  • ControlledRetainedValuesStore 已替换为 ManagedRetainedValuesStore

  • RetainedValuesStore 现在是一个接口。

以前,安装自定义 RetainedValuesStore 可能如下所示:

  val retainedValuesStore = retainControlledRetainedValuesStore()
  if (active) {
      CompositionLocalProvider(LocalRetainedValuesStore provides retainedValuesStore) {
          content()
      }

      val composer = currentComposer
      DisposableEffect(retainedValuesStore) {
          val cancellationHandle =
              if (retainedValuesStore.retainExitedValuesRequestsFromSelf > 0) {
                  composer.scheduleFrameEndCallback {
                      retainedValuesStore.stopRetainingExitedValues()
                  }
              } else {
                  null
              }

          onDispose {
              cancellationHandle?.cancel()
              retainedValuesStore.startRetainingExitedValues()
          }
      }
  }

通过这些 API 更改,可以使用以下代码来表示此安装:

  val retainedValuesStore = retainManagedRetainedValuesStore()
  if (active) {
      LocalRetainedValuesStoreProvider(retainedValuesStore) {
          content()
      }
  }

bug 修复

  • 在将可移动内容移出槽表之前,转移可移动内容中范围的失效(I9d123b/451651649

版本 1.10.0-beta01

2025 年 10 月 22 日

发布了 androidx.compose.runtime:runtime-*:1.10.0-beta01。版本 1.10.0-beta01 中包含这些提交内容

API 变更

  • RetainedValuesStore.getExitedValueOrDefault 已重命名为 RetainedValuesStore.getExitedValueOrElseIf9653b/452340613
  • isKeepingExitedValues 已重命名为 isRetainingExitedValuesI660bfb/437095756
  • RetainScope 已重命名为 RetainedValuesStoreRetainScopeHolder 已重命名为 RetainedValuesStoreRegistryRetainScopeHolder.RetainScopeProvider 已重命名为 RetainedValuesStoreRegistry.ProvideChildRetainedValuesStore。(Idf23ab/437095756

bug 修复

  • SaveableStateRegistry 中延迟初始化 SavedState,直到首次使用时才���行初始化。(Ic0a93)

版本 1.10.0-alpha05

2025 年 10 月 8 日

发布了 androidx.compose.runtime:runtime-*:1.10.0-alpha05。版本 1.10.0-alpha05 中包含这些提交内容

bug 修复

  • 在发布模式下填充 DiagnosticComposeException 的堆栈轨迹。(Ib76cb)
  • 修复了快照状态中的一个问题,即当使用类型的合并政策时,可能会导致错误地计算先前的值,从而返回状态的未来值而不是先前的值。如果存在两个以上的待处理可变快照,并且至少有一个正在应用的值具有合并政策,就会出现这种情况。(I527b5b/442791065

版本 1.10.0-alpha04

2025 年 9 月 24 日

发布了 androidx.compose.runtime:runtime-*:1.10.0-alpha04。版本 1.10.0-alpha04 中包含这些提交内容

API 变更

  • 添加了 RetainScopeHolder API 来管理 RetainScopes 的集合。这可用于为容器和导航宿主实现留存,这些容器和导航宿主包含许多具有不同留存时限的子项。(I10e0f)
  • 添加了 RetainedContentHostretainControlledRetainScope API,可用于为消失的内容(例如可折叠窗格 [If81f6])创建自动管理的 RetainScopes
  • 弃用了 Updater#set 的内联重载,因为它对提供的值进行了太多次装箱。添加了 Updater#init 的重载,该重载接受一个参数,从而避免需要捕获 lambda。(Id679e)
  • 引入了 RetainedEffect,这是一个类似于 DisposableEffect 的附带效应 API,它遵循保留生命周期,而不是组合生命周期。此 API 旨在用于与不实现或无法实现 RetainObserver 的其他对象的保留相关联的效应。(I1c61fb/177562901
  • 更正了 RetainObserver.onRetained 的文档,并添加了 RetainObserver.onUnused(与 RememberObserver.onAbandoned 类似)(Ia6fc5)

bug 修复

  • 修复了在函数(例如可组合调用)中的第一个组之��和可移除的组(例如 if 语句)之前调度 remember 的问题,该问题可能会以错误的顺序调度 onForgotten。(I453f6b/346821372
  • 避免在初始化 LaunchedEffect 时遍历协程上下文。(I8d2c3b)

版本 1.10.0-alpha03

2025 年 9 月 10 日

发布了 androidx.compose.runtime:runtime-*:1.10.0-alpha03。版本 1.10.0-alpha03 中包含这些提交内容

API 变更

  • 引入了基于组密钥的 Compose 堆栈轨迹,可在精简版应用中使用。从 Kotlin 2.3.0 开始,Compose 编译器 Gradle 插件将生成这些轨迹的 ProGuard 映射。这些堆栈轨迹默认处于停用状态,请使用 ComposeStackTraceMode.GroupKeys 将其启用。(Ifbcb5)
  • 为工具添加了接口:IdentifiableRecomposeScopeIdd5e0b/434194620
  • 防止在涉及 CompositionLocalContext 的组合中发生不必要的失效(I3fa21b/412750209

bug 修复

  • 在文档和工具中明确说明,传递给保留的键也会被保留。避免传递会导致内存泄漏的保留键。(Ib553bb/177562901
  • 修复了以下问题:当在不同线程上调用已暂停的合成的 resume() 时,如果主线程尝试为下一帧重新合成可暂停的合成,待处理通知的状态可能会变得混乱。(Ie5f17b/442649894
  • 记录在组合中捕获的异常。(I47d78b/432799675b/436878515b/359623674b/400436355

版本 1.10.0-alpha02

2025 年 8 月 27 日

发布了 androidx.compose.runtime:runtime-*:1.10.0-alpha02。版本 1.10.0-alpha02 中包含这些提交内容

API 变更

  • 添加了 @DoNotRetain,可用于注释不应与 retain API 一起使用������型,可能是因为它们会泄漏资源。(Ie5435)
  • 使用 Kotlin 2.0 发布的项目需要使用 KGP 2.0.0 或更高版本。(Idb6b5)

bug 修复

  • 修复了可移动内容,以便在内容修改合成的根节点时正确计算 Applier 的操作。在计算可移动内容的变化时,up() 调用可能会处于待处理状态,并且未调度到应用器,从而导致应用器状态在后续使用时定位不正确。(I7c583)、(I47b70
  • CheckResult 标记为已弃用,因为它不应被使用。(I32934)

版本 1.10.0-alpha01

2025 年 8 月 13 日

发布了 androidx.compose.runtime:runtime-*:1.10.0-alpha01。版本 1.10.0-alpha01 中包含这些提交内容

API 变更

  • 引入了保留 API。与 rememberSaveable 类似,retain 可以持久保存离开组合层次结构的记忆值。保留的值不会序列化,并且比保存的值具有更短的生命周期,其行为类似于 androidx ViewModel。如需了解详情,请参阅相关文档。(Ia3105b/177562901
  • 添加了 awaitOrScheduleNextCompositionEnd() API,该 API 会在 Recomposer 完成当前帧的合成时发出回调。如果 Recomposer 当前未合成帧,此 API 会暂停,直到下一个帧的合成完成,并安排合成新帧。(Ib873c)
  • 添加了一个不返回 Unit 的组合本地提供程序 API(I22521b/271871288
  • 添加了一个功能标志 isMovableContentUsageTrackingEnabled,用于跟踪可移动内容的使用情况,以避免在最初创建内容时产生一些开销。此功能标志目前默认处于停用状态。(Ia713d)

bug 修复

  • 修复了可移动内容在子组合之间移动时发生的崩溃问题。(I3fa1eb/436858107
  • 修复了以下 bug:当可组合函数位于多个嵌套的子组合函数内时,可组合函数堆栈轨迹的一部分会缺失。(I98c6f)
  • 将默认 minSdk 从 API 21 移至 API 23(Ibdfcab/380448311b/435705964b/435705223
  • 修复了从多个线程更新可暂停的组合的内部状态时出现的竞态条件。(I03895)
  • 更新了组合注册观测器,使其在初始��合之前被调用。(I4adcab/430600932
  • 修复了小 bug,使 AutoboxingStateValuePropertyDetector 同时兼容 K1 和 K2。(Ie81c1)

外部贡献

  • 使 runtime-rxjava2 制品成为多平台制品,并添加 JVM 作为受支持的目标平台。(I5409e)
  • 使 runtime-rxjava3 制品成为多平台制品,并添加 JVM 作为受支持的目标平台。(I97e84)

版本 1.9

版本 1.9.5

2025 年 11 月 19 日

发布了 androidx.compose.runtime:runtime-*:1.9.5。版本 1.9.5 中包含这些提交内容

bug 修复

  • 在将可移动内容移出槽表之前,转移该内容中范围的失效(I9d123b/451651649

版本 1.9.4

2025 年 10 月 22 日

发布了 androidx.compose.runtime:runtime-*:1.9.4。版本 1.9.4 中包含这些提交内容

版本 1.9.3

2025 年 10 月 8 日

发布了 androidx.compose.runtime:runtime-*:1.9.3。版本 1.9.3 中包含这些提交内容

版本 1.9.2

2025 年 9 月 24 日

发布了 androidx.compose.runtime:runtime-*:1.9.2。版本 1.9.2 中包含这些提交内容

版本 1.9.1

2025 年 9 月 10 日

发布了 androidx.compose.runtime:runtime-*:1.9.1。版本 1.9.1 中包含这些提交内容

bug 修复

  • 避免重新合成正在合成的合成内容。(Iacb01)
  • 防止重组范围被暂停两次。(I060b2b/431584881

版本 1.9.0

2025 年 8 月 13 日

发布了 androidx.compose.runtime:runtime-*:1.9.0。版本 1.9.0 中包含这些提交内容

自 1.8.0 以来的重要变更

  • 随 Compose 提供的 Lint 检查现在要求 AGP 版本不低于 8.8.2。如果您无法升级 AGP,可以改为在 gradle.properties 中使用 android.experimental.lint.version=8.8.2(或更新的版本)单独升级 Lint。如需在 IDE 中运行 Compose lint 检查,您必须使用 Android Studio Ladybug 或更高版本。
  • 已创建新的运行时注释库。此工件包含不依赖于 Compose 运行时的注解定义,因此可以从非 Compose 模块中使用。
    • @Stable@Immutable@StableMarker 已移至 runtime-annotation,以允许注释非 Compose 模块
    • 已将 @FrequentlyChangingValue@RememberInComposition 添加到 runtime-annotation。@FrequentlyChangingValue 标记可能会导致频繁重组的声明,@RememberInComposition 标记应在组合中记住的声明。相应的 lint 检查会针对不正确的用法发出警告。

版本 1.9.0-rc01

2025 年 7 月 30 日

发布了 androidx.compose.runtime:runtime-*:1.9.0-rc01。版本 1.9.0-rc01 中包含这些提交内容

bug 修复

  • 更新了组合注册观测器,使其在初始组合之前被调用。(I4adcab/430600932

版本 1.9.0-beta03

2025 年 7 月 16 日

发布了 androidx.compose.runtime:runtime-*:1.9.0-beta03。版本 1.9.0-beta03 中包含这些提交内容

版本 1.9.0-beta02

2025 年 7 月 2 日

发布了 androidx.compose.runtime:runtime-*:1.9.0-beta02。版本 1.9.0-beta02 中包含这些提交内容

bug 修复

  • 缩短了组合之间槽表中值的引用生命周期。在某些情况下,slot 表中的引用可能会比必要的时长多持续一帧。(I49e74b/418516940
  • 移除了热重载方法的 Kotlin 乱码。(Ic56a3b/426871325

版本 1.9.0-beta01

2025 年 6 月 18 日

发布了 androidx.compose.runtime:runtime-*:1.9.0-beta01。版本 1.9.0-beta01 中包含这些提交内容

API 变更

  • 添加了用于解析由 Compose 编译器添加的源代码信息的工具 API。(Iceaf9b/408492167
  • SnapshotStateSet 现在在 Android 上实现了 Parcelable,因此现在支持将其用作 rememberSaveable { ... } 的一部分。(I755ddb/378623803
  • SnapshotStateList 现在在 Android 上实现了 Parcelable,因此现在支持将其用作 rememberSaveable { ... } 的一部分。(Id18beb/378623803
  • movableContentOf() 现在已标记 @RememberInComposition 注释,这可让 lint 捕获错误用法 (I2738d)
  • 更新了实验性组合观察器 API,以更全面地观察重新组合的原因 (I32b6a)
  • setDiagnosticStackTraceEnabled 更改为实验性,以考���此功能的未来发展。(I11db3)
  • currentCompositeKeyHash 现已被弃用。已改用 currentCompositeKeyHashCode。替换 API 使用更多位对同一哈希进行编码,从而大幅降低了组合层次结构中两个随机无关的组具有相同哈希键的几率。(I4cb6ab/177562901
  • 使用 Kotlin 2.0 发布的项目需要使用 KGP 2.0.0 或更高版本才能使用 (Idb6b5)
  • @Stable@Immutable@StableMarker 已以兼容的方式移至运行时注释。如果您想从不依赖于 Compose 的库中使用这些注释,现在可以依赖于 runtime-annotation。(I23a16)
  • 将接受 KSerializerrememberSaveable 重载重命名为 rememberSerializable。此变更明确了其与 kotlinx.serialization 的预期用途。直接在 rememberSaveable 中支持一般 kotlinx.Serializable 类需要 reified 类型形参,这会破坏源代码兼容性,因为需要所有调用方在编译时提供具体化的类型信息。(Idb875I38627b/376028110

bug 修复

  • 已设置可暂停内容且已取消的组合必须进行处置。现在,组合会检查此情况,如果重复使用,则会抛出异常。(I2daa5b/406792785
  • 修复了可暂停的组合,使其在可暂停的组合被处置时不再发送虚假的 onForgotten 来记住观察者。已取消的可暂停的组合中的 RememberObservers 应仅发送 onAbandoned。(I26f54)
  • 修复了可移动内容问题,即在处理可移动内容的后期阶段到达的失效会添加到 Composer,但当内容移动时,这些失效不会更新,导致内容在错误的位置重新组合。(Icd2fab/409439507
  • 修复了可移动内容在被合成后但在被移动之前失效的问题。(I99eacb/229001114
  • 在调用 previous() 之后,调用由 SnapshotStateList 生成的列表迭代器的 remove() 可能会从列表中移除错误的元素,并且与 ArrayList 对同一序列的调用所执行的操作不匹配。(I05ab7b/417493222
  • 修复了 onForgotton 调度方面的排序问题,该问题可能会导致一次性效应的 onDispose 以错误的顺序执行。(Ic1c91b/417450712
  • 修复了在可暂停的组合中重用状态处理的问题(Ife96eb/404058957
  • 修复了以下问题:当组合暂停并重新启动时,如果之前暂停的某些状态需要重组,因为在组合暂停期间,它读取的某些状态发生了变化,则会重复使用状态。(I441d1b/416209738
  • 完成了可暂停组合 remember 调度修复,以解决问题 b/404058957,之前的修复不完整。(I1afd4b/404058957
  • OffsetApplier 现在可以正确替换 apply()(随可暂停的组合引入)。如果没有此功能,可暂停的组合在更新虚拟节点时可能会抛出异常。(Idbf31b/409291131
  • 修复了以下死锁问题:当正在调度帧时,如果取消对 FrameClock.withFrameNanos 的挂起调用,可能会影响 Molecule 用户。(I89cabb/407027032
  • Recomposer 可能会因可移动内容而进入空闲状态(Ie5416b/409267170
  • 在可暂停的组合期间,onReuseonDeactivate 可能反转的顺序。现在,它们保证按 onDeactivate/onReuse 的顺序发生。(I996e4b/404058957
  • 修复了在可暂停的组合中调度 remember 观察者的功能,以避免在同一应用中调度 remembered/forgotten(I570b2b/404645679b/407931790
  • 在 Compose Multiplatform 中将 LifecycleRegistry 切换为不安全模式,以停用 MainThread 检查并修复线程问题。如需了解详情,请参阅 CMP-8227。(Icee87)

外部贡献

  • 修复了影响 Molecule 用户的 bug,该 bug 会导致使用 RecompositionMode.Immediate 时出现重新组合遗漏。(I9f3a9b/419527812
  • 公开了 PausableComposition isAppliedisCancelled getter,用于检查 PausableComposition 的状态。(I994aa)
  • FunctionKeyMeta 注解添加了 AnnotationTarget.FUNCTION。(I08021)

版本 1.9.0-alpha04

2025 年 6 月 4 日

发布了 androidx.compose.runtime:runtime-*:1.9.0-alpha04。版本 1.9.0-alpha04 中包含这些提交内容

API 变更

  • SnapshotStateSet 现在在 Android 上实现了 Parcelable,因此现在支持将其用作 rememberSaveable { ... } 的一部分。(I755ddb/378623803
  • SnapshotStateList 现在在 Android 上实现了 Parcelable,因此现在支持将其用作 rememberSaveable { ... } 的一部分。(Id18beb/378623803
  • movableContentOf() 现在已标记 @RememberInComposition 注释,这可让 lint 捕获错误用法 (I2738d)
  • 更新了实验性组合观察器 API,以更全面地观察重新组合的原因 (I32b6a)

bug 修复

  • 修复了 onForgotton 调度方面的排序问题,该问题可能会导致一次性效应的 onDispose 以错误的顺序执行。(Ic1c91b/417450712
  • 修复了在可暂停的组合中重用状态处理的问题(Ife96eb/404058957
  • 修复了小 bug,使可变集合检测同时兼容 K1 和 K2 (Ie4878)
  • 修复了小 bug,使对被���换的属性访问器的注释查找同时兼容 K1 和 K2 (I9900d)

外部贡献

  • 修复了影响 Molecule 用户的 bug,该 bug 会导致使用 RecompositionMode.Immediate 时出现重新组合遗漏。(I9f3a9b/419527812
  • 公开了 PausableComposition isApplied 和 isCancelled getter,用于检查 PausableComposition 的状态。(I994aa)

版本 1.9.0-alpha03

2025 年 5 月 20 日

发布了 androidx.compose.runtime:runtime-*:1.9.0-alpha03。版本 1.9.0-alpha03 中包含这些提交内容

API 变更

  • setDiagnosticStackTraceEnabled 更改为实验性,以考虑此功能的未来发展。(I11db3)

bug 修复

  • 修复了以下问题:当组合暂停并重新启动时,如果之前暂停的某些状态需要重组,因为在组合暂停期间,它读取的某些状态发生了变化,则会重复使用状态。(I441d1b/416209738
  • 完成了针对问题 b/404058957 的可暂停组合 remember 调度修复,之前的修复不完整。(I1afd4b/404058957
  • SaveableStateHolder.SaveableStateProvider 现在通过组合为其内容提供 LocalSavedStateRegistryOwner。(Ia2761b/413108878
  • androidx.compose.runtime.saveable 现在依赖于 androidx.lifecycle.runtime.compose。(I53228b/413108878

版本 1.9.0-alpha02

2025 年 5 月 7 日

发布了 androidx.compose.runtime:runtime-*:1.9.0-alpha02。版本 1.9.0-alpha02 中包含这些提交内容

API 变更

  • 已弃用具有自定义“键”的 rememberSaveable。它会绕过位置范围界定,从而导致状态错误和不一致的行为(例如,意外的状态共享或丢失、嵌套 LazyLayouts 中的问题)。请移除“key”参数,以使用位置范围界定来获得一致的本地范围状态。如需了解详情,请参阅完整的提交消息。(I5e6ffb/357685851

bug 修复

  • OffsetApplier 现在可以正确替换 apply()(随可暂停的组合引入)。如果没有此功能,可暂停的组合在更新虚拟节点时可能会抛出异常。(Idbf31b/409291131
  • 修复了以下死锁问题:当正在调度帧时,如果取消对 FrameClock.withFrameNanos 的挂起调用,可能会影响 Molecule 用户。(I89cabb/407027032
  • Recomposer 可能会处于空闲状态,但可移动的内容状态仍处于待舍弃状态。这种情况通常不会发生,因为可移动的内容状态会在 Recomposer 的主循环中被舍弃。不过,当可移动内容在 resume() 期间被舍弃时,可暂停的组合中可能会出现这种情况(Ie5416b/409267170
  • 在可暂停的组合期间,onReuseonDeactivate 可能反转的顺序。现在,它们保证会按 onDeactivate/onReuse 的顺序发生。(I996e4b/404058957

版本 1.9.0-alpha01

2025 年 4 月 23 日

发布了 androidx.compose.runtime:runtime-*:1.9.0-alpha01。版本 1.9.0-alpha01 包含这些提交内容

行为变更

  • 随 Compose 提供的 Lint 检查现在要求 AGP 版本不低于 8.8.2。如果您无法升级 AGP,可以改为在 gradle.properties 中使用 android.experimental.lint.version=8.8.2(或更新版本)单独升级 Lint。如需在 IDE 中运行 Compose lint 检查,您必须使用 Android Studio Ladybug 或更高版本。

API 变更

  • currentCompositeKeyHash 现已被弃用。已改用 currentCompositeKeyHashCode。替换 API 使用更多位对同一哈希进行编码,从而大幅降低了组合层次结构中两个随机无关的组具有相同哈希键的几率。(I4cb6ab/177562901
  • 使用 Kotlin 2.0 发布的项目需要使用 KGP 2.0.0 或更高版本才能使用 (Idb6b5)
  • @Stable@Immutable@StableMarker 已以兼容的方式移至运行时注释。如果您想从不依赖于 Compose 的库中使用这些注释,现在可以依赖于 runtime-annotation。(I23a16)
  • 移除了 onCreatingonDisposing,因为它们已被废弃并重命名为 onPreCreateonPreDispose。此变更完成了重命名。(I97461)
  • 公开一个本地组合,用于根据组合中的 Compose 节点位置附加 Compose 堆栈轨迹。(Ie0bdab/354163858
  • 基于��储在组合中的来源信息,引入诊断性 Compose 堆栈轨迹。(I3db9fb/354163858
  • 弃用 runWithTimingDisabled,改用 runWithMeasurementDisabled,后者更清楚地描述了行为 - 所有指标都已暂停。此外,公开 MicrobenchmarkScope 父类,因为无法重新声明 runWithMeasurementDisabled 函数以打开访问权限,因为它是内嵌的。(I9e23bb/389149423b/149979716
  • 添加了 @FrequentlyChangingValue:一种可用于标记函数和属性 getter 的注解,用于指示不应在组���中直接调用它们,因为这可能会导致频繁的重组。例如,标记滚动位置值和动画值。警告由相应的 lint 检查提供。(I83630b/234042500
  • 添加了 @RememberInComposition:一种可用于标记构造函数、函数和属性 getter 的注解,用于指示它们不得在组合中直接调用,而必须先记住再调用。相应的 lint 检查会引发错误。此注解可用于标记返回有状态 / 可变对象、在组合中需要保持身份的对象,或实例化成本高昂且应在组合中缓存的对象。(Ie7db0)
  • 添加了新的 rememberSaveable 重载,该重载支持使用 KotlinX Serialization 实现类型安全的 KSerializer 状态持久性。仍支持基于 Saver 的现有 API。(Iea4abb/376028110

bug 修复

  • 修复了在可暂停的组合中调度 remember 观察者的功能,以避免在同一应用中调度 remembered/forgotten(I570b2b/404645679b/407931790
  • 根据 API 准则,将 SnapshotObserver 方法 onCreating 重命名为 onPreCreate,并将 onDisposing 重命名为 onPreDispose。之前的这些方法已被废弃,新方法默认会调用旧方法,因此此接口的现有实现会继续正常运行,直到这些方法被移除。我们会在后续 CL 中移除这些方法,该 CL 将很快跟进此 CL。在 1.8 稳定版发布之前,将从 1.8 Beta 版中移除这些 API。(I6d753)
  • 修复了以下问题:在重组出现在可移动组之后的省略组时,记忆的值可能会被错误地遗忘并重新计算(I62cabb/383769314
  • LaunchedEffectrememberCoroutineScope 中添加了对 Compose 堆栈轨迹的支持(I705c0b/354163858
  • Compose lint 检查现在要求从命令行运行的 AGP 版本至少为 8.8.2,并且 IDE 支持至少需要 Android Studio Ladybug。如果您使用的是旧版 AGP,可以在 gradle.properties 中设置 android.experimental.lint.version=8.8.2 以升级 Lint 版本,而不会影响 AGP。(I6f2a8)

外部贡献

  • FunctionKeyMeta 注解添加了 AnnotationTarget.FUNCTION。(I08021)

版本 1.8

版本 1.8.3

2025 年 6 月 18 日

发布了 androidx.compose.runtime:runtime-*:1.8.3。版本 1.8.3 中包含这些提交内容

1.8.2 版

2025 年 5 月 20 日

发布了 androidx.compose.runtime:runtime-*:1.8.2。版本 1.8.2 中包含这些提交内容

版本 1.8.1

2025 年 5 月 7 日

发布了 androidx.compose.runtime:runtime-*:1.8.1。版本 1.8.1 中包含这些提交内容

版本 1.8.0

2025 年 4 月 23 日

发布了 androidx.compose.runtime:runtime-*:1.8.0。版本 1.8.0 中包含这些提交内容

版本 1.8.0-rc03

2025 年 4 月 9 日

发布了 androidx.compose.runtime:runtime-*:1.8.0-rc03。版本 1.8.0-rc03 中包含这些提交内容

版本 1.8.0-rc02

2025 年 3 月 26 日

发布了 androidx.compose.runtime:runtime-*:1.8.0-rc02。版本 1.8.0-rc02 中包含这些提交内容

版本 1.8.0-rc01

2025 年 3 月 12 日

发布了 androidx.compose.runtime:runtime-*:1.8.0-rc01。版本 1.8.0-rc01 中包含这些提交内容

API 变更

  • 根据 API 准则,将 SnapshotObserver 方法 onCreating 重命名为 onPreCreate,并将 onDisposing 重命名为 onPreDispose。之前的这些方法已被废弃,新方法默认会调用旧方法,因此此接口的现有实现会继续正常运行,直到这些方法被移除。我们会在后续 CL 中移除这些方法,该 CL 将很快跟进此 CL。在 1.8 稳定版发布之前,将从 1.8 Beta 版中移除这些 API。(I6d753)

版本 1.8.0-beta03

2025 年 2 月 26 日

发布了 androidx.compose.runtime:runtime-*:1.8.0-beta03。版本 1.8.0-beta03 中包含这些提交内容

版本 1.8.0-beta02

2025 年 2 月 12 日

发布了 androidx.compose.runtime:runtime-*:1.8.0-beta02。版本 1.8.0-beta02 中包含这些提交内容

bug 修复

  • 在可暂停的组合中重新抛出捕获的异常。(384486d)

版本 1.8.0-beta01

2025 年 1 月 29 日

发布了 androidx.compose.runtime:runtime-*:1.8.0-beta01。版本 1.8.0-beta01 中包含这些提交内容

API 变更

  • 修复了在组合期间引发未从 Exception 扩展的可抛出对象可能会导致“Pending composition has not been applied”错误的问题。(I356beb/382094412

版本 1.8.0-alpha08

2025 年 1 月 15 日

发布了 androidx.compose.runtime:runtime-*:1.8.0-alpha08。版本 1.8.0-alpha08 包含这些提交内容

版本 1.8.0-alpha07

2024 年 12 月 11 日

发布了 androidx.compose.runtime:runtime-*:1.8.0-alpha07。版本 1.8.0-alpha07 中包含这些提交内容

API 变更

  • 添加了有助于布局检查器将子组合与父组合相关联的工具 API,以处理节点未用于将组合桥接在一起的情况。(I4ce3d)
  • SnapshotId 的算术和特殊常量设为内部而非公开。如有必要,可以通过使用 toInt()toLong()SnasphotId 转换为 IntLong,然后对转换后的值执行算术运算。(Ic3a57)

外部贡献

  • 针对 movableContentOf 参数优化了存储。(ed87177)

版本 1.8.0-alpha06

2024 年 11 月 13 日

发布了 androidx.compose.runtime:runtime-*:1.8.0-alpha06。版本 1.8.0-alpha06 中包含这些提交内容

API 变更

  • PausableComposition API 的更改。这些是相对于 1.8.0-alpha 之前版本(自 1.8.0-alpha02 起)的破坏性变更,但由于这些是 1.8.0 中的新 API,因此在 API 仍处于 Alpha 阶段时,不会保持向后兼容性。(I39819)
  • 添加了用于观察 Recomposer 中新组合创建情况的工具 API (Iaeb7e)
  • Snapshot 添加了类型为 LongsnapshotId,并弃用了 id。为了避免在帧速率非常高且动画运行时间很长的系统上出现快照 ID 溢出,快照的 ID 从 Int 更改为 Long。该类型已设为预期/实际类型,以便在没有原生 Long 类型的平台上,该类型可以是 Int 或其他类型。没有原生 Long 的平台(例如 JavaScript)应避免使用高帧速率(超过 1000 FPS),否则会导致 Int 大约每 24 天溢出一次。(I38ac3b/374821679

bug 修复

版本 1.8.0-alpha05

2024 年 10 月 30 日

发布了 androidx.compose.runtime:runtime-*:1.8.0-alpha05。版本 1.8.0-alpha05 中包含这些提交内容

bug 修复

  • 通过向 SnapshotIdSet 添加 Int.MAX_VALUE 修复了堆栈溢出问题。(b/370536104Ic4179f6
  • 运行时微优化 (I50c60)
  • 允许 R8 移除调试 runtimeCheck 调用 (I8c44)
  • 使 compoundKeyOf 变为迭代式而非递归式 (I5817f)

外部贡献

  • 实现包含集合列表的堆栈 (I7d47c)

版本 1.8.0-alpha04

2024 年 10 月 16 日

发布了 androidx.compose.runtime:runtime-*:1.8.0-alpha04。版本 1.8.0-alpha04 中包含这些提交内容

性能改进

  • 在构造函数中为状态记录提供快照 ID (85c00f)
  • 重构了 SnapshotState*** 以避免类验证错误 (6ee4a6)
  • 修复了 R8 规则,以防止抛出内嵌异常 (5beb92)
  • 微优化操作 (d73c5c)
  • 优化 JVM 上的 SynchronizedObject 分配 (2b043f)

版本 1.8.0-alpha03

2024 年 10 月 2 日

发布了 androidx.compose.runtime:runtime-*:1.8.0-alpha03。版本 1.8.0-alpha03 中包含这些提交内容

性能改进

  • rememberCoroutineScope 延迟创建子上下文 (f61464)
    • rememberCoroutineScope 通常用于启动协程以响应合成后发生的事件。在某些情况下,这些事件可能永远不会发生,从而导致创建和取消作业的成本增加,但没有任何好处。
    • 使 rememberCoroutineScope 返回的范围在被访问时延迟创建其 coroutineContext,如果范围从未使用,则完全避免创建和取消作业。

版本 1.8.0-alpha02

2024 年 9 月 18 日

发布了 androidx.compose.runtime:runtime-*:1.8.0-alpha02。版本 1.8.0-alpha02 中包含这些提交内容

新功能

  • 添加了 PausableComposition,该函数允许创建可在组合期间暂停并异步应用于组合的子组合。暂停功能需要编译器支持,目前正在开发中。(I3394b)

版本 1.8.0-alpha01

2024 年 9 月 4 日

发布了 androidx.compose.runtime:runtime-*:1.8.0-alpha01。版本 1.8.0-alpha01 中包含这些提交内容

版本 1.7

版本 1.7.8

2025 年 2 月 12 日

发布了 androidx.compose.runtime:runtime-*:1.7.8。版本 1.7.8 中包含这些提交内容

版本 1.7.7

2025 年 1 月 29 日

发布了 androidx.compose.runtime:runtime-*:1.7.7。与 1.7.6 相比没有任何变化。

发布了 androidx.compose.runtime:runtime-*:1.7.6。版本 1.7.6 中包含这些提交内容

版本 1.7.5

2024 年 10 月 30 日

发布了 androidx.compose.runtime:runtime-*:1.7.5。版本 1.7.5 中包含这些提交内容

版本 1.7.4

2024 年 10 月 16 日

发布了 androidx.compose.runtime:runtime-*:1.7.4。版本 1.7.4 中包含这些提交内容

版本 1.7.3

2024 年 10 月 2 日

发布了 androidx.compose.runtime:runtime-*:1.7.3。版本 1.7.3 中包含这些提交内容

版本 1.7.2

2024 年 9 月 18 日

发布了 androidx.compose.runtime:runtime-*:1.7.2。版本 1.7.2 中包含这些提交内容

版本 1.7.1

2024 年 9 月 10 日

  • Android 制品没有任何变化。移除了 -desktop 制品,并添加了 -jvmStubs-linuxx64Stubs 制品。这些目标均不打算使用,它们只是占位符,用于帮助 Jetbrains Compose 开展工作。

版本 1.7.0

2024 年 9 月 4 日

发布了 androidx.compose.runtime:runtime-*:1.7.0。版本 1.7.0 中包含这些提交内容

自 1.6.0 以来的重要变更

  • 新增了以下功能:提供基于其他组合本地变量的值计算出的组合本地变量(默认情况下使用 compositionLocalWithComputedDefault()),或提供一个 lambda 来使用 providesComputed(而非 provides)计算该值。
  • 可通过使用可从计算值的 lambda 表达式中访问的组合本地变量的 currentValue 属性来获取组合本地变量的值。此属性用于代替仅在 @Composable 函数中可访问的 current。(Iadbc0)
  • 新创建的状态对象可立即从其他快照(包括全局快照)访问,并具有其初始状态。在应用创建对象的快照之前,任何后续修改均不可见。
  • mutableStateOf()(及其原始版本)的初始状态是作为参数传递给 mutableStateOf() 的值。mutableStateListOf()mutableStateMapOf() 的初始状态为空。
  • 添加了 Snapshot.isInSnapshotSnapshot.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)计算该值。
  • 可通过使用可从计算值的 lambda 表达式中访问的组合本地变量的 currentValue 属性来获取组合本地变量的值。此属性用于代替仅在 @Composable 函数中可访问的 current。(Iadbc0)

API 变更

  • 新创建的状态对象可立即从其他快照(包括全局快照)访问,并具有其初始状态。在应用创建对象的快照之前,任何后续修改均不可见。
  • mutableStateOf()(及其原始版本)的初始状态是作为参数传递给 mutableStateOf() 的值。mutableStateListOf()mutableStateMapOf() 的初始状态为空。
  • 添加了 Snapshot.isInSnapshotSnapshot.PreexistingSnapshotId,用于使状态对象在创建后能够立即从全局快照中访问。
  • 自定义状态对象可以支持立即访问,只需遵循对内置快照对象所做的更改模式即可。(I84a17)

bug 修复

  • 修复了嵌套快照中 readObserver 的合并问题。这会导致在 snapshotFlow 内使用时,嵌套的派生状态失效不足。(Idf138)

版本 1.7.0-alpha06

2024 年 4 月 3 日

发布了 androidx.compose.runtime:runtime-*:1.7.0-alpha06。版本 1.7.0-alpha06 中包含这些提交内容

bug 修复

  • 修复了提供单个值处理 providesDefault 的问题 (538f45)
  • 避免了 Recomposer 在访问帧时钟时出现死锁 (07e5c6)

版本 1.7.0-alpha05

2024 年 3 月 20 日

发布了 androidx.compose.runtime:runtime-*:1.7.0-alpha05。版本 1.7.0-alpha05 中包含这些提交内容

bug 修复

  • 清除了已停用的组合中的后期更改 (5950bc)

版本 1.7.0-alpha04

2024 年 3 月 6 日

发布了 androidx.compose.runtime:runtime-*:1.7.0-alpha04。版本 1.7.0-alpha04 中包含这些提交内容

性能改进

  • 每次派生状态评估 (ee7daf) 调用 Snapshot.current 一次
  • 在合成中,每次观测读取 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 中包含这些提交内容

bug 修复

  • 使同一帧中子组合中的可组合 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 中包含这些提交内容

性能优化

  • 添加了在添加子群组后创建广告资源块的功能 (b5960c)
  • 优化了快照状态的记录修改 (28c3fe)
  • 启用强力跳过模式 (ed1766)

bug 修复

  • 针对固有记忆中的默认参数元数据添加了记录 (096665)
  • 在更多情况下使 currentCompoundHashKey 唯一 (d4a872)
  • 在退出内嵌函数调用时实现组 (2a90fc)

版本 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 中包含这些提交内容。

bug 修复

  • 以与 onForgotten 相同的顺序调用 onRelease 回调。(2cd790)
  • snapshotFlow 中未观测到的过滤条件更改状态。(796b80)

版本 1.6.0

2024 年 1 月 24 日

发布了 androidx.compose.runtime:runtime-*:1.6.0版本 1.6.0 中包含这些提交内容

自 1.5.0 以来的重要变更

新功能

  • 重新抛出在重组循环期间被吞噬的异常 (4dff9a)

性能优化

  • 优化了快照状态的记录修改 (28c3fe)
  • 优化了 rememberSaveable (f01d79)
  • 推迟重新读取派生状态,直到记录更改为止 (f38099)
  • 改进了提供组合本地值的方式 (a337ea)

bug 修复

  • 修复了 slot 表内存泄漏问题 (73fcfe)
  • 跳过将要移除的子组合的重新组合。(Ieeb99b/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)

bug 修复

  • 在上下文中,为组合本地范围状态使用引用政策。(83361c)
  • 将 $dirty 捕获限制为内嵌 lambda。(acfca0)
  • 修复了可移动内容有时会收到错误的合成本地变量的问题。(035cd6)
  • RecomposeScopeImpl 中使用更快的非分配哈希映射。(d79494)
  • DerivedState 中使用 ObjectIntMap(21862e)
  • DerivedState 中,针对 int SnapshotThreadLocal 使用 IntRef(04eaf4)

版本 1.6.0-alpha08

2023 年 10 月 18 日

发布了 androidx.compose.runtime:runtime-*:1.6.0-alpha08版本 1.6.0-alpha08 中包含这些提交内容。

bug 修复

  • 仅当 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,以便使用列表辅助函数的直接索引版本。(I5210cb/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 接口,用于管理子组合的生命周期和重复使用。(I812d1b/252846775

版本 1.6.0-alpha03

2023 年 8 月 9 日

发布了 androidx.compose.runtime:runtime-*:1.6.0-alpha03版本 1.6.0-alpha03 中包含这些提交内容

bug 修复

  • 修复了新的 CompositionLocalProvider 优化 (3118e88)
  • 修正了可移动内容节点的拆解方式。(5e3d59b)

版本 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 添加了一个特殊情况的重载,可避免用于更快地提供多个值的开销,但在提供单个值时会产生开销。(I6d640b/288169379

bug 修复

  • 修复了 slot 表内存泄漏问题 (73fcfe)
  • 修复了当 stateSaver 返回 null 时恢复 rememberSaveable 的方式 (90748c)

版本 1.6.0-alpha01

2023 年 6 月 21 日

发布了 androidx.compose.runtime:runtime-*:1.6.0-alpha01版本 1.6.0-alpha01 中包含这些提交内容

bug 修复

  • 跳过将要移除的子组合的重新组合。(Ieeb99b/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)

bug 修复

  • 跳过将要移除的子组合的重新组合。(Ieeb99b/254645321
  • 不在 ComposerImpl 中保留快照引用 (0206f7)
  • 不应用两次组合 (f5791b)
  • 确保非初始化的派生状态值的失效 (aa2a92)
  • 在组合处置期间调用 onEndChanges。(62cc8c)
  • 修复了将内容移入子组合的问题 (4beb41)
  • 修复了潜在的死锁问题(c1a4258edce0
  • 现在,为 Android 窗口创建的重组器在收到 ON_STOP 通知时,只会阻止对 withFrameNanos 的调用,而不是阻止所有组合。这意味着,与已停止的 activity 关联的窗口将继续因数据更改而重新组合,但动画或 withFrameNanos 的任何其他调用方都会被阻塞。(Id9e7fb/240975572
  • 在处置效应之前,先执行 LayoutNode 的停用回调 3784073
  • 修复了重新启动的 lambda 的已更改标志 ea81df9
  • 修复了具有节点的可组合项的实时编辑回归问题 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)
  • 减少了分配 (I65c09d7ea77727974445808)
  • 快速取消 Compose CoroutineScopes (a55362bd382f)
  • 使用无法访问的状态记录覆盖状态对象的记录 (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 中包含这些提交内容

bug 修复

  • 推迟重新读取派生状态,直到记录更改为止 (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 中包含这些提交内容

bug 修复

版本 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)

bug 修复

  • 减少了分配 (I65c09d7ea77727974445808)
  • 不在 ComposerImpl 中保留快照引用 (0206f7)
  • 快速取消 Compose CoroutineScopes (a55362bd382f)
  • 不应用两次组合 (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)

bug 修复

  • 在组合处置期间调用 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 窗口创建的重组器在收到 ON_STOP 通知时,只会阻止对 withFrameNanos 的调用,而不是阻止所有组合。这意味着,与已停止的 activity 关联的窗口将继续因数据更改而重新组合,但动画或 withFrameNanos 的任何其他调用方都会被阻塞。(Id9e7fb/240975572

bug 修复

  • 修复了快照列表和映射中的潜在死锁问题 5c1a425
  • 在处置效应之前,先执行 LayoutNode 的停用回调 3784073
  • 修复了重新启动的 lambda 的已更改标志 ea81df9
  • 修复了节点为 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)

bug 修复、性能改进

  • 使用无法访问的状态记录覆盖状态对象的记录 (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 中包含这些提交内容

bug 修复

  • 修复了快照列表和地图中的潜在死锁问题 2eb6570

  • 如果向 SnapshotStateListSnapshotStateMap 添加内容的操作与对状态记录的直接写入操作并发进行,可能会遇到死锁。93fcae828b 引入了直接写入来释放未使用的记录,这使得遇到此问题的可能性大大增加。

  • 现在,锁的顺序是,在持有映射或列表锁时,绝不会尝试获取快照锁。

版本 1.4.1

2023 年 4 月 5 日

发布了 androidx.compose.runtime:runtime-*:1.4.1版本 1.4.1 中包含这些提交内容

bug 修复

  • 修复了结束节点组时的 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
  • 如果组合的父提供程序已更改,则始终强制重组 9526fcc
  • 针对已取消作业的 Recomposer 容忍度 a55f7ed
  • 改进了对大量 Composer 的失效处理 9b7ed67
  • 修复了为非本地返回生成关闭组的问题 b6f590c

版本 1.4.0-rc01

2023 年 3 月 8 日

发布了 androidx.compose.runtime:runtime-*:1.4.0-rc01版本 1.4.0-rc01 中包含这些提交内容

bug 修复

版本 1.4.0-beta02

2023 年 2 月 22 日

发布了 androidx.compose.runtime:runtime:1.4.0-beta02androidx.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)

bug 修复

  • 移除组合本地查询中的方框 (62f66a)
  • 改进快照状态的内存引用特性 (dfb451)

版本 1.4.0-alpha05

2023 年 1 月 25 日

发布了 androidx.compose.runtime:runtime:1.4.0-alpha05androidx.compose.runtime:runtime-saveable:1.4.0-alpha05版本 1.4.0-alpha05 中包含这些提交内容

API 变更

  • 内嵌/已废弃的隐藏函数的更多类型/可为 null 性 (I24f91)

版本 1.4.0-alpha04

2023 年 1 月 11 日

发布了 androidx.compose.runtime:runtime-*:1.4.0-alpha04版本 1.4.0-alpha04 中包含这些提交内容

API 变更

  • TestMonotonicFrameClock 现在使用正确的实验性注解。(I95c9e)

bug 修复

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

bug 修复

  • 现在,系统会在 Recomposer 应用更改完成后发送快照应用通知。(Iad6c0b/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 变更

  • SnapshotStateListSnapshotStateMap 现已充分显式实现 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 中包含这些提交内容

bug 修复

  • 进行了更新,以支持 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

运行时修复

快照系统

版本 1.3.0-rc01

2022 年 10 月 5 日

发布了 androidx.compose.runtime:runtime-*:1.3.0-rc01版本 1.3.0-rc01 中包含这些提交内容

bug 修复

  • 修复了来自槽表的 ArrayIndexOutOfBoundsException (b/249076084)

版本 1.3.0-beta03

2022 年 9 月 21 日

发布了 androidx.compose.runtime:runtime-*:1.3.0-beta03版本 1.3.0-beta03 中包含这些提交内容

行为破坏性变更

  • rememberrememberCoroutineScope 的参数已更改为 crossinline。这会针对提前返回报告错误,而不是允许提前返回,后者会导致系统稍后报告内部错误。
  • 这项变更可能会导致系统报告新的编译器错误,要求从传递给这些函数的 lambda 中移除非局部返回值。(Ibea62)

版本 1.3.0-beta02

2022 年 9 月 7 日

发布了 androidx.compose.runtime:runtime-*:1.3.0-beta02版本 1.3.0-beta02 中包含这些提交内容

bug 修复

版本 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 中包含这些提交内容

bug 修复

  • 修复了内存泄漏的问题:处置通过透明快照创建的嵌套快照(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 中引入的一些功能,以及诸多用于进行稳定处理的 bug 修复。其中最重要的一项新功能是引入了 movableContentOf API,该 API 可用于实现复杂的用户体验,例如共享元素过渡。movableContentOf API 用于将可组合 lambda 转换为另一种 lambda,后者会将其状态以及相应的节点移至其被调用的任何新位置。当上一个调用退出组合时,相应状态会暂时保留,如果对 lambda 的新调用进入组合,状态和关联的节点会移至新调用的位置。如果没有新调用加入,系统会永久移除相应状态;请注意,观察器会收到通知。

  • 如果在同一个组合中多次调用 movableContentOf lambda,系统会为每个调用创建新的状态和节点,随着调用退出组合和新调用进入组合,系统会按调用顺序将相应状态从第一个退出的调用移至后续进入的调用。新调用未声明的所有状态都会永久移除。

  • 除了这项功能和一些其他新功能之外,我们还花费了大量时间来让运行时和快照状态系统保持稳定。移除了各种内存泄漏并优化了代码路径。

  • 下面总结了这些更改:

1.2 的新功能

1.2 的性能

1.2 中的 bug 修复

版本 1.2.0-rc03

2022 年 6 月 29 日

发布了 androidx.compose.runtime:runtime-*:1.2.0-rc03版本 1.2.0-rc03 中包含这些提交内容。

bug 修复

  • 派生的状态观察之前已被无条件地从重组作用域和组合中移除,这会破坏可能仍在观察派生状态的其他作用域。只有其他作用域不再观察派生状态实例时,此更改才会移除此类实例。(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)
  • 现在可以使用 @file 前缀在文件范围内使用 @ComposableTarget 注解和标有 @ComposableTargetMarker 的注解。在文件范围内使用目标注解将使编译器假定文件中的所有可组合函数都要以关联的 Applier 为目标。例如,使用 @file:UiComposable 即会声明所有 @Composable 函数均以 Compose 界面 Applier 为目标。如果某个函数需要以其他 Applier 为目标,则必须为所需 Applier 明确提供目标标记注解。(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)
  • 限制了对 OptIn(InternalComposeTracingApi) 的跟踪 API (Composer.setTracer)。(I9187f)
  • 添加了 ResuableContentHost,对于为可重用内容创建的状态的生命周期,可以进行更好的控制。例如,如果子组合暂时未使用,则内容可能会被停用,从而导致组合中的所有记住的状态都被忘记触发,例如所有可处理效应。(I2c0f2b/220322704

版本 1.2.0-alpha07

2022 年 4 月 6 日

发布了 androidx.compose.runtime:runtime-*:1.2.0-alpha07版本 1.2.0-alpha07 中包含这些提交内容

API 变更

  • 添加了新函数 Snapshot.withoutReadObservation { ... }。用户可以通过该函数运行所传递的 lambda,而无需订阅在此块中读取的状态值的更改。如果您既想从基于快照的线程安全写入/读取中受益,又希望能够在不造成非必要重组或重新测量的情况下读取值,这会对您很有帮助。(I9f365b/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 变更

  • 添加了 ComposableTargetComposableTargetMarkerComposableOpenTarget,以便系统在编译时报告何时以预期使用范围外的 Applier 为目标而调用了某个可组合函数。

    在大多数情况下,注解可以由 Compose 编译器插件推断出来,因此直接使用这些注解的情况应该很少。无法推断的情况包括创建和使用自定义 applier、抽象可组合函数(例如接口方法)、可组合 lambda 性���的字段或全局变量(推断出局部变量和参数),或者使用 ComposeNode 或相关可组合函数的情况。

    对于自定义 Applier,调用 ComposeNodeReusableComposeNode 的可组合函数需要为该函数和任何可组合 lambda 的参数类型添加 CompoableTarget 注解。不过,建议您创建一个带有 ComposableTargetMarker 的注解,然后使用带标记的注解,而不是直接使用 ComposableTarget。标有 ComposableTargetMarker 的可组合注解等同于用属性类的完全限定名称作为 applier 参数的 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 的新调用进入组合,状态和关联的节点会移至新调用的位置。如果没有新调用加入,系统会永久移除相应状态;请注意,观察器会收到通知。

    如果在同一个组合中多次调用 movableContentOf lambda,系统会为每个调用创建新的状态和节点,随着调用退出组合和新调用进入组合,系统会按调用顺序将相应状态从第一个退出的调用移至后续进入的调用。新调用未声明的所有状态都会永久移除。(Ib4850)

  • 为组合添加了跟踪 API,以便工具能够提供更详细的可组合函数跟踪记录。现在,编译器会生成对包含来源信息的跟踪 API 的调用。(Ib0eb5)

    如需从发布 build 中移除这些调用以及关联的来源信息,请添加以下 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 中包含这些提交内容

bug 修复

  • 修复了 androidx.compose.ui.platform.RenderNodeLayer.updateDisplayList 中的 NullPointerExceptionaosp/1947059b/206677462
  • 修复了在 Android 上从剪贴板读取内容时剪贴板内容导致的崩溃问题。(I06020b/197769306
  • 修复了 LazyVerticalGrid 中的 RTL(aosp/1931080b/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 无障碍功能指南触摸目标尺寸的要求。例如,按钮触摸目标将扩展为至少 48x48dp 的尺寸,即使您将按钮尺寸设为更小也不影响。这会使 Compose Material 与 Material Design 组件的行为保持一致,以便在混合使用 View 和 Compose 时提供一致的行为。此变更还可确保在您使用 Compose Material 组件创建界面时,能够满足触摸目标无障碍功能的最低要求。
  • 导航栏提供稳定支持
  • 将之前的一些实验性 API 升级到了稳定版
  • 支持更高版本的 Kotlin

版本 1.1.0-rc03

2022 年 1 月 26 日

发布了 androidx.compose.runtime:runtime-*:1.1.0-rc03版本 1.1.0-rc03 中包含这些提交内容。

bug 修复

  • 已更新为支持 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(Ic2ab3b/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 Compiler 现在支持较低版本的 Compose Runtime (1.0)。在此变更之前,Compose Compiler 仅与相同版本或更高版本的 Compose Runtime 兼容。此变更生效后,Compose Compiler 可与较低版本的 Compose Runtime (1.0) 兼容。(aosp/1796968)
  • 更新了 Compose 1.1.0-alpha03,使其依赖于 Kotlin 1.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 中包含这些提交内容

bug 修复

  • 修复了跟踪 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 和 AGP 7.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/1763445aosp/1758105b/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/193006595b/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>HSP 中的一个或多个字符,用于指示相应方法应标记为“Hot”“Startup”还是“Post Startup”。

  • <CLASS_DESCRIPTOR> 是目标方法所属类的描述符。例如,类 androidx.compose.runtime.SlotTable 的描述符为 Landroidx/compose/runtime/SlotTable;

  • <METHOD_SIGNATURE> 是方法的签名,其中包含方法的名称、参数类型和返回值类型。例如,LayoutNode 中的 fun isPlaced(): Boolean 方法具有签名 isPlaced()Z

  • 这些格式可以包含通配符(***?),以便让单个规则能够涵盖多个方法或类。

规则的作用是什么?

  • 如果某个方法具有 H 标志,则表示该方法为“hot”方法,应提前进行编译。

  • 如果某个方法具有 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 已更改为在一次性重组中支持重组更改。(Iaafd1b/184173932

版本 1.0.0-beta07

2021 年 5 月 18 日

发布了 androidx.compose.runtime:runtime-*:1.0.0-beta07版本 1.0.0-beta07 中包含这些提交内容

API 变更

  • 添加了新的 Compose 编译器 API,这些 API 允许在缩减源代码大小的过程中移除由编译器生成的源代码信息。(Ia34e6)
  • 引入了 ReusableContent,它会尝试重复使用其内容中的节点,而不是在键发生更改后替换节点。键发生更改后,内容的槽表中先前的值将被忽略,但生成的节点和用于更新节点的值除外。

    引入了 ReusableComposeNode,它会重复使用已发出的节点,而不是像对 ComposeNode 那样替换该节点。(I1dd86)

  • @ComposeCompilerApi 不再 @RequiresOptIn (Iab690)

bug 修复

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

bug 修复

  • ui-test-manifest 和 ui-tooling-data 中的 AndroidManifest 文件现在与 Android 12 兼容(I6f9deb/184718994

版本 1.0.0-beta04

2021 年 4 月 7 日

发布了 androidx.compose.runtime:runtime-*:1.0.0-beta04版本 1.0.0-beta04 中包含这些提交内容

bug 修复

  • 在此变更之前,本地可组合函数可根据其参数而跳过。此更改生效后,系统不会再跳过任何本地可组合函数。之所以会有这项变更,是因为在通常情况下,本地函数会从父函数获取参数,而跳过本地函数是出现 bug 的常见原因。

    总之,请参考以下示例:

    @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() 存在输入参数时会恢复原值的问题(I1b110b/182403380

版本 1.0.0-beta03

2021 年 3 月 24 日

发布了 androidx.compose.runtime:runtime-*:1.0.0-beta03版本 1.0.0-beta03 中包含这些提交内容

API 变更

  • 废弃了 DefaultMonotonicFrameClock。现在,如果在不提供 MonotonicFrameClock 的情况下调用 withFrameNanosRecomposer.runRecomposeAndApplyChanges,将抛出 IllegalStateException。(I4eb0d)

版本 1.0.0-beta02

2021 年 3 月 10 日

发布了 androidx.compose.runtime:runtime-*:1.0.0-beta02版本 1.0.0-beta02 中包含这些提交内容

bug 修复

版本 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)
  • compositionLocalOfstaticCompositionLocalOfdefaultFactory 现在是必需项,而非可选项。

    这项变更消除了不可为 null 的类型(不提供默认出厂设置)可能存在的类型错误。之前,此操作会为不可为 null 的类型提供 null 引用值。

    对于可为 null 的类型,请考虑提供 { null } 作为默认出厂设置。

    除非可提供合理的默认设置,否则我们不建议使用具有不可为 null 的类型的本地设置。如果不存在合理的默认设置,则 defaultFactory lambda 应抛出异常。不过,抛出异常意味着本地设置的使用者将隐式依赖于相关设置是以类型系统不强制执行该设置为前提的。(Ifbd2a)

  • 从 Comepose 运行时中移除了已废弃的符号 (I3252c)

  • 移除了已废弃的 emptyContent()。已改用 {}。(Idb33fb/179432510

  • 已将 Provider 重命名为 CompositionLocalProvider

    • Composition 构造函数不再接受键参数,并已废弃。
    • currentCompositeKeyHash 已变为可组合的顶级属性,而不是可组合的顶级函数。
    • CompositionData 和 CompositionGroup 已移至 androidx.compose.runtime.tooling 命名空间
    • ComposableLambda 已成为接口,而不再是具体的类,也不再包含类型参数。
    • ComposableLambdaN 已成为接口,而不再是具体的类,也不再包含类型参数。
    • snapshotFlow 函数已移至 androidx.compose.runtime 命名空间
    • SnapshotMutationPolicy 的合并方法不再是实验性方法
    • 移除了 @TestOnly 顶级 clearRoots 函数。不再需要此函数。
    • 移除了 keySourceInfoOf 和 resetSourceInfo 函数。不再需要这些方法。
    • 移除了 Composer.collectKeySourceInformation。不再需要此函数。
    • 移除了 isJoinedKey、joinedKeyLeft 和 joinedKeyRight 方法。不再需要这些方法。
    • 各种顶级 API 均已移至不同的文件中并进行了重新整理。由于 Kotlin 的文件类语义,这会破坏二进制文件兼容性,但不会破坏源代码兼容性,因此对大多数用户来说这不会成为一个问题。
    • I99b7db/177245490
  • SnapshotStateObserver 不再处于实验阶段 (Id2e6a)

  • 删除了一些先前已废弃的 API(Ice5dab/178633932

  • 进行了以下 Material API 方面的更改:

    • 向 Top/BottomAppBar 添加了 contentPadding 参数,以允许自定义默认内边距。
    • 对 BackdropScaffold 中的参数进行了重新排序,以便遵循 API 指南中关于将必需参数排在可选参数前面的要求。
    • 将 BottomNavigationItem 中的 icon 参数移到了 selectedonClick 后面。
    • 将 BottomNavigationItem 中的 alwaysShowLabels 参数重命名为了 alwaysShowLabel
    • 将几个组件中的 bodyContent 参数重命名为了 content
    • ButtonDefaults.buttonColors() 中的参数进行了重新排序。请注意,由于参数的类型并未更改,因此这不会导致您的代码出现错误。请确保您使用的是命名参数或手动更新相关排序,否则您的代码将无法像以前一样运行。
    • darkColors() 添加了 secondaryVariant 参数。此颜色通常与深色主题中的 secondary 相同,添加此参数是为了保持一致性和便于进行进一步的自定义。
    • 从公共 API Surface 中移除了 ElevationDefaults 和 animateElevation(),因为它们不常用/不实用。
    • Slider 中的 onValueChangeEnd 重命名为了 onValueChangeFinished,并使其可为 null。
    • 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 变更

  • 从 UiApplier 移除了对 ViewGroup 的支持。移除了废弃的 emitView 可组合项。(Ifb214)
  • CompositionReference 已重命名为 CompositionContext (I53fcb)
  • ComponentActivity.setContent 已移至 androidx.activity:activity-compose 模块中的 androidx.activity.compose.setContent。(Icf416)
  • 更新了 Snapshot API 以使其更加符合 API 指南,并在公共 API 中隐藏了内部实现类。(Id9e32)
  • 已重命名 Ambient,以与 Ambient 重命名为 CompositionLocal 匹配。Ambient 过去被命名为 AmbientFoo,现在 CompositionLocal 被命名为 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)

  • snapshotFlowwithMutableSnapshot 不再是实验性方法 (I6a45f)

  • 现在可以关闭 Recomposer。关闭的 Recomposer 会继续重组,直至组合子协程完成。Recomposer.shutDown 已重命名为 cancel,与 close 形成对比。(Ib6d76)

  • compose:runtime-dispatch 制品现已废弃。现在,MonotonicFrameClock 位于 compose:runtime 中,AndroidUiDispatcher 位于 compose:ui 中。(Ib5c36)

  • 已重构 Compose 编译器插件面向的 API,旨在使用接口而不是具体类。接口也不再使用类型参数。

    这种内部更改不会影响源代码兼容性,但这是一项重大的二进制文件更改。(I3b922b/169406779

  • 引入了 SnapshotMutableState (Icfd03)

  • DisposableEffectDisposable 已重命名为 DisposaleEffectResult (Ica7c6)

  • 移除了 Recomposer.current()。[Abstract]ComposeView 现在默认设置为延迟创建的、作用域为窗口的 Recomposer(由窗口的 ViewTreeLifecycleOwner 驱动)。在主机生命周期结束时,系统会暂停重组和基于 withFrameNanos 的动画 tick 操作。(I38e11)

  • Recomposer.runningRecomposers 现在提供只读 RecomposerInfo 的一个全局 StateFlow,用于观察进程中正在进行的组合状态。请首选此 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 API 和 DisposableEffect API (If760e)
  • emit() API 和所有重载均已废弃并重命名为 ComposeNode。这些 API 是一样的,只不过为了遵循 Compose 的命名惯例而采用了不同的名称 (I4137b)
  • invalidate 和 compositionReference() 现已废弃,取而代之的分别是 currentRecomposeScope 和 rememberCompositionReference。(I583a8)
  • CompositionLifecycleObserver 现已废弃,取而代之的是 RememberObserver。

    RememberObserver 已替代 CompositionLifecycleObserver,且语义和方法名称也已改变。始终推荐的做法是,对那些只记住一次的对象,可以机械地更改为新的 API。不过,如果引用在组合中被记住不止一次,那么对于只调用 onRemembered 一次的每个引用,都会调用 onEnter。如果将 onEnter 用于 WithConstraintsScaffold 等子组合,则会多次调用该对象,从而打破单次调用 onEnter 的保证,而对于 RememberObserver 已将该对象移除。

    RememberObserver 添加了在以下情况下会被调用的 onAbandoned:如果从传递到 remember 的回调中返回 RememberObserver 实例,但该实例在组合状态下不被记住,并因此永远不会调用 onRemembered。当异常导致组合在完成前终止,或者组合因以下两种原因而遭到舍弃时就会发生上述情况:组合因不再是最新的而处于正在生成状态或者组合不再被需要。如果遵循上述单一引用建议的 RememberObserver 实例跟踪的是外部资源,那么 onForgottenonAbandoned 都会表示不再需要该资源。如果该对象跟踪的是 onRemembered 中已开始的工作或已分配的资源,则可以忽略 onAbandoned,因为如果调用 onRemembered,就不会调用 onAbandoned。(I02c36)

  • 不将 collectAsState() 函数标记为内嵌函数 (Ia73e4)

bug 修复

  • 已将 WithConstraints 重新设计为 BoxWithConstraints 并移至 foundation.layout。(I9420bb/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 和实验性 API 提供节点。通常可如下解决此问题:将具有此类依赖项的代码封装在 SideEffect 可组合项中,从而将代码的执行推迟到节点创建和初始化之后。(I018da)

API 变更

  • 添加了在 Recomposer 已应用更改的情况下进行跟踪的方式。(I1b3e2)
  • 扩展了 [Abstract]ComposeView API 以允许回收基于 Compose 的视图,处理其组合以便日后重新创建。添加了用于安装和发现作用域为窗口的 Recomposer 的 API 和用于创建子组合的 CompositionReference。

    添加了 ViewCompositionStrategy,用于配置 [Abstract]ComposeView 的组合处理策略;默认行为是在窗口分离时进行处理。(I860ab)

bug 修复

  • Recomposer 现���提供其当前状态的 Flow,因此可监控其 activity 和相关效果的 activity。(Ifb2b9)
  • 现在可通过 keyEvent.nativeKeyEvent 访问原生 keyEvent(I87c57b/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。这些 API 以前被标记为 InternalComposeAPI,现已变成 Compose 模块的内部 API。

    添加了 CompositionData 和 CompositionGroup,用于替代 ui-tooling API 来提取组合信息。CompositionData 和 CompositionGroup 是公开的,但不能在 ui-tooling API 之外使用,因为它们会提供 ui-tooling API 解译的原生信息 (I31a9c)

  • 不再将 Applier 类视为实验性 API (Id85b0)

  • 更改了 Applier 接口,简化了将树的构建方式从自上而下改为自下而上的过程。

    insert() 方法已重命名为 insertTopDown()

    添加了新方法 insertBottomUp()

    applier 可以使用 insertTopDown()insertBottomUp() 向正修改的树中插入节点,具体取决于哪个方法的效果更好。

    在构建某些树(例如 LayoutNodeView)时,自下而上构建会比自上而下构建效率更高。在做出此变更之前,若想实现自下而上构建,要进行很多插入操作,并需将插入内容复制到需借助自下而上的构建方式来提高性能的每个 applier。通过此变更,Applier 替换 insertBottomUp() 即可实现自下而上构建树,替换 insertTopDown() 即可实现自上而下构建树。(Icbdc2)

  • Compose 支持可进行可组合调用的属性 getter。系统不会停止支持此类 getter,但将某个属性 getter 声明为 @Composable 的语法会不断变化。

    要采用现已废弃的语法进行此声明,需对属性本身进行注解:

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

    若要采用目前正确的语法进行此声明,需对属性的 getter 进行注解:

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

    在一段时间内,这两种语法都能使用,但前者(即现已废弃的语法)最终将导致编译错误。(Id9197)

bug 修复

  • 将 AndroidOwner 变为内部函数(Ibcad0b/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 检查结果和指南,还将一些尾随 lambda 名为 children 的 API 迁移到了 content。(Iec48e)
  • Recomposer 不再接受 EmbeddingContext;系统会从 effectCoroutineContext 中获取所需的调度依赖项。废弃了 FrameManager;平台在进行集成时应初始化其自己的全局快照处理操作。(I02369)
  • RestorableStateHolder.withRestorableState 函数已重命名为 RestorableStateProvider (I66640)

bug 修复

  • 废弃了名称后缀为 Ambient 的 Ambient 属性,将它们替换成了以 Ambient 为前缀的新属性(以与其他 Ambient 属性保持一致并遵循 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)
  • 添加了 provideDefault,用作提供上下文环境的替代方案,可用于指定只会在尚未提供上下文环境值时设置的上下文环境值。(Id6635b/171024925
  • LaunchedTask 已重命名为 LaunchedEffect,以与 SideEffect 和 DisposableEffect API 保持一致。为了鼓励采用最佳实践,不允许使用不含主题参数的 LaunchedEffect。(Ifd3d4)
  • Applier 现在包含 onBeginChanges/onEndChanges 回调,可在 Composer 开始/结束将更改应用��树时调用。您可根据需要将这些回调用于资源的批量管理。(Icf476)
  • 现在,Recomposer 在构造时需要使用 CoroutineContext (Ic4610)
  • 对不应影响公共 API 的内部 SlotTable 实现进行了更改。(If9828)
  • 移除了不使用初始值的已废弃 rxjava2 适配器 (Idb72f)

bug 修复

  • 废弃了 foundation.Text,取而代之的是 material.Text。如需了解不使用来自主题的值的“非预设立场型”基本文本 API,请参阅 androidx.compose.foundation.BasicText。(If64cb)
  • 废弃了 BaseTextField,请改用 BasicTextField。(I896eb)
  • 已将几个与布局相关的符号从 androidx.compose.ui 移至 androidx.compose.layout.ui。(I0fa98b/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,以将数据从重组发布到持续进行或长期存在的进程(例如 DisposableEffect 或 LaunchedTask)。
    • (Id50b9)
  • MutableVector 现已实现 RandomAccess(I85d73b/170461551
  • 添加了 SideEffect 可组合项,用于将组合的附带效应应用到其管理的对象。SideEffect 旨在取代 onCommit 可组合项。(Ia77c2)
  • 新增了实验性 API RestorableStateHolder。通过该 API,可先为子树保存定义为 [savedInstanceState] 和 [rememberSavedInstanceState] 的状态,然后再对其进行处理,以便下次利用恢复后的状态将其重新组合起来。(I66884b/166586419

bug 修复

  • 在 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)
  • 通过减少每次滚动时 subcomposition 中的工作量,改善了 LazyColumn/Row 的滚动性能。为 Composition 类添加了新的 hasInvalidations() 方法。将 Recomposer 中的 hasPendingChanges() 方法重命名为 hasInvalidations()(Ib2f32b/168293643b/167972292b/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)

bug 修复

  • 废弃了 foundation.Box。请改用 foundation.layout.Box。(Ie5950b/167680279

版本 1.0.0-alpha03

2020 年 9 月 16 日

发布了 androidx.compose.runtime:runtime-*:1.0.0-alpha03版本 1.0.0-alpha03 中包含这些提交内容

API 变更

  • CompositionCoroutineScope 不再实现 MonotonicFrameClockwithFrameNanos 的调用方应明确导入顶层函数。(Icb642b/166778123

bug 修复

  • 全局测试函数(例如 onNodewaitForIdle)现已废弃,请改用根据 ComposeTestRule 定义的新函数 (I7f45a)
  • launchInComposition 不再启动未分派的协程(Ief6afb/166486000

版本 1.0.0-alpha02

2020 年 9 月 2 日

发布了 androidx.compose.runtime:runtime-*:1.0.0-alpha02版本 1.0.0-alpha02 中包含这些提交内容

API 变更

  • 添加了 snapshotFlowwithMutableSnapshot API,分别用于使用和生成快照数据更改。(I3e722)
  • 可组合函数的调用规范发生了变化。这是一项重大的二进制文件更改。所有库都必须重新编译才能使用此版本的 Compose 编译器插件。

    这项更改不会在源代码级别产生重大变化,因为只有已更改的 API 属于明确选择启用的编译器 API。(I7afd2b/158123185

  • 从 EmbeddingContext 中移除了调度方法 (I7b9be)

  • 废弃了 onPreCommit;onCommit 的功用现在与 onPreCommit 相同。

    现在,onCommit 和 onActive 在已提交的组成部分变更的同一 Choreographer 帧中运行,而不是在下一个 Choreographer 帧开始处运行。(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 变更

  • 自定义 emit 现在可以做如下声明:可以跳过它的一个或多个 setter,并且可以独立于 emit 对 setter 进行重新组合。(Ibbd13)
  • 移除了已废弃的 FrameManager 调用。

    更改了内部 Compose API,从而降低了跟踪状态对象(如 mutableStateof())所需的开销 (I80ba6)

  • 为清楚起见,现已废弃 state { ... } 可组合项,取而代之的是对 remember { mutableStateOf(...) } 的显式调用。这样可减少管理状态所需的整体 API Surface 及概念数量,且与类属性委托的 by mutableStateOf() 模式相一致。(Ia5727)

  • Flow.collectAsState 现在根据组合本身来确定默认调度程序,而非默认使用 Dispatchers.Main。(I9c1d9)

  • 解决了在 for 循环内使用某些用于保存状态的方法时出现崩溃的问题。现已支持在 savedInstanceState() 中使用同一键,并已根据此新要求对 UiSavedStateRegistry 的 API 做出调整(I4ab76b/160042650b/156853976b/159026663b/154920561

bug 修复

  • 废弃了 emitView。请在可行的情况下改用 AndroidView 在 Compose 中发出 View。请注意,今后将不再支持直接对 View 和 ViewGroup 进行组合,除非二者是组合树的分支(在这种情况下,可通过 AndroidView 进行组合)。(I29b1eb/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 类)可能会出现性能下降,因为现在系统默认会在将其 equals() 方法分配给 mutableStateOf() 时调用这些方法。

    如需恢复之前的行为,请在对 mutableStateOf()ambientOf()savedInstanceStateOf() 的调用中添加政策参数 policy = referentialEqualityPolicy()。(Ic21a7)

  • RowColumn 现在属于内联函数,其使用开销将显著降低。(I75c10)

bug 修复

  • 废弃了 setViewContent,请改用 setContent。(I7e497b/160335130
  • 添加了 MonotonicFrameAnimationClock,您可将 MonotonicFrameClock 用作 AnimationClockObservable,以消除基于协程的新时钟与仍使用基于旧回调的时钟的 API 之间的差异。

    现在,ManualAnimationClock 的 MonotonicFrameClock 等效项是 ManualFrameClock。(I111c7b/161247083

  • 我们对 Modifier.stateDraggable 进行了彻底的重新设计,并将其重命名为 Modifier.swipeable。引入了一个新 SwipeableState 类,并对 DrawerState 和 BottomDrawerState 进行了重构,使其可从该类继承数据。[Modal/Bottom]DrawerLayout 不再使用 onStateChange 参数。(I72332b/148023068

  • 已废弃 Modifier.plus,现在改用 Modifier.then。“Then”能够更明确地指出先后执行顺序,同时还禁止输入会破坏链且降低可读性的 Modifier.padding().background() + anotherModifierIedd58b/161529964

  • 添加了 SubcomposeLayout。这是一个低级别基元,如果我们想要使用仅在衡量子树组合期间后期可用的一些值,就可以利用此基元在衡量期间组合子项。例如,WithConstraints 并非通过 SubcomposeLayout 实现。(I25cc8)

  • Material FilledTextField 已重命名为 TextField,且基础 TextField 已重命名为 BaseTextField,您可轻松寻找并使用所需的最简单的 API(Ia6242b/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 Surface 区域和我们需要传授的概念
    • 更为贴近其他类似工具包(Swift UI、React、Flutter)
    • 这是一项可撤消的决定。我们以后可以随时恢复 @Model
    • 解决了极端情况下的使用难题,轻松回答了有关将 @Model 配置为我们需要处理的内容的问题
    • @Model 数据类、等号、哈希代码等。
    • 如何让部分属性“被观测”,而其他属性不被观测?
    • 如何指定要在观测中使用的结构性与指示性等式?
    • 减少系统中的“魔力”。这会降低有人误认为系统比实际上要更智能(即知道如何区分列表)的可能性
    • 使观测的粒度更为直观。
    • 改进了类中从变量到属性的可重构性
    • 可能使您可以手动进行针对特定状态的优化
    • 与生态系统的其他部分更加贴近,并减少了在不可变性或我们“接受可变状态”方面的不确定性

    迁移注意事项

    @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 实例。实际上,请将原始类的所有 var 属性替换为以 mutableStateOf 作为属性委托的 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 }
     )
    }
    

    I409e8b/152050010b/146362815b/146342522b/143413369b/135715219b/143263925b/139653744

  • 更改了 Compose 的编译器的代码生成策略。在更改之前,Compose 编译器会转换对可组合函数的调用。进行此更改后,现在我们可以转换可组合函数的正文,并使调用位置保持不变(大多数情况下)。

    这意味着与 Compose 运行时进行通信的大多数逻辑发生在函数正文的开头,而不是在调用位置。

    这应该是针对所有 Compose 操作的源兼容性更改。大多数 Compose 用户都不需要在更改后更新任何代码。

    为了支持这项更改,所有可组合函数的 JVM 签名均已更改。将接受单个参数的可组合函数转换为接受 3 个参数的函数,其他参数为合成器,即“键”整数,一个用于通过调用传播元数据的位掩码整数。

    Compose 现在还会将默认参数转换为可组合函数。这项操作不会引入函数本身的额外合成默认过载,因此此更改会导致定义的函数变少。

    已知的有意行为更改是由于以下原因造成的:

    1. 有些调用会跳过之前不会跳过的位置
    2. 默认参数表达式中的可组合项表达式现已正确订阅并处理

    这项工作包括一些优化: 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,以包含其他编译时参数(I60756b/143464846

  • 向 MutableVector 添加了 sortWith 和 removeRange (Icccf7)

  • 为 CompositionLifecycleObserver 添加了默认方法实现 (I24289)

  • Applier 现在需要一个 clear() 方法来处理组合 (Ibe697)

  • 向 MutableVector 添加了 asMutableList(),以使其能够传递到公共 API,而不必复制整个列表。(I298df)

  • 添加了 rememberCoroutineScope() 以获取组合中托管的 CoroutineScope,以便启动任务来响应事件。(I0e264)

  • MutableVector 是一个新的集合,不实现任何标准 Collection 接口。此集合提供了高于其他要求的速度,并且仅适用于内部实现。(I8ebd6)

  • 暂时移除了 StableMutableListStableMutableMap,以避免 Compose 所需的 Kotlin 版本出现问题。一旦 Compose 更新到不存在问题的 Kotlin 版本,就会重新引入这些接口。

    SnapshotStateListSnapshotStateMap 现已公开,但恢复 StableMutableListStableMutableMap 后就会将其废弃。(Ia7769)

  • 添加了顶级 onFrameNanos 函数用于动画定时 (Ie34c5)

  • 已废弃 @Untracked 注解,替换为 @ComposableContract(tracked=false) (Id211e)

  • RestartableFunction 和关联的 API 已重命名为 ComposableLambda 等。因为只有编译器定位到这些 API,所以此变更在正常情况下应该不会影响源代码级别的兼容性。重命名的主要目的是,当这个类出现在堆栈轨迹中时,用户能够更清晰地了解这个类 (I7eb25)

  • @Composable 注解对类不再有效 (Ia5f02)

  • Ambient<T> 现在带有 @Stable 注解而不是 @Immutable 注解 (I0b4bb)

  • 在此变更之前,如果存在 @Composable 函数,Compose 编译器插件会以非常复杂的方式拦截对该函数内构造函数的调用(I5205ab/158123804

  • Recompose 可组合项已不再属于有效抽象。大多数重新组合都应由 MutableState 分配促成。在此之外,建议您使用 invalidate 函数来触发对当前范围的重新组合。(Ifc992)

  • Observe 已不再属于有效抽象函数。如需对其进行复制,只需创建一个执行可组合 lambda 参数的可组合函数即可复制其实现。例如,@Composable fun Observe(body: @Composable () -> Unit) = body() (I40d37)

  • 废弃了 @Direct,取而代之的是 @ComposableContract(restartable=false) (If4708)

  • 为最近引入的 StateFlow 添加了一个适配器,可用于预先填充初始值,使返回的 State 不可为 null(I61dd8b/156233789

  • 为 Flow 添加了一个适配器。用法示例:val value by flow.collectAsState()(If2198b/153375923

  • [Mutable]State 属性委托运算符移到了扩展,以支持 Kotlin 1.4 属性委托优化。调用方必须添加 import 才能继续使用 by state { ... }by mutableStateOf(...)。(I5312c)

  • androidx.compose.ViewComposer 移到了 androidx.ui.node.UiComposer。移除了 androidx.compose.Emittable,它与 ComponentNode 重复。移除了 androidx.compose.ViewAdapters,它们不再是受支持的用例。已废弃 Compose.composeInto,请改为使用 setContentsetViewContent。已废弃 Compose.disposeComposition,改用 setContent 返回的 Compositiondispose 方法。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> 文档(I4c7eeb/143769776

  • 添加了 ui-livedata - 带适用于 LiveData 的适配器的新制品。用法示例:val value by liveData.observeAsState()(Ie9e8cb/150465596

  • 已废弃没有明确的初始值的 Rx 适配器。使用 null 作为默认值并不一定是最佳选择,以 List 为例,最好是以 emptyList() 开头(I00025b/161348384

  • 添加了 ui-rxjava2 - 带适用于 RxJava2 的适配器的新制品。用法示例:val value by observable.subscribeAsState()(Ifab4bb/153369097

  • savedInstanceState() 现在可以与可为 null 的类型一起使用(I6847fb/153532190

  • 新增了 listSaver() 和 mapSaver(),可让您更轻松地编写自定义 Saver 对象(I8cf68b/152331508

  • 新函数:savedInstanceState() 和 rememberSavedInstanceState()。它们与 state() 和 remember() 类似,但包含已保存实例状态支持构建(If1987b/152025209

bug 修复

  • runOnIdleCompose 已重命名为 runOnIdle (I83607)
  • 将 LayoutNode 变成了实验性 API (I4f2e9)
  • 废弃了 androidx.ui.foundation.TextFieldValue 和 androidx.ui.input.EditorValue。还废弃了使用该类型的 TextField、FilledTextField 和 CoreTextField 可组合项。请改为使用 androidx.ui.input.TextFieldValue(I4066db/155211005
  • 移除了已废弃的 DrawBackground API,改为在修饰符上使用 drawBackground 扩展 API。重构了颜色、笔刷和涂料 drawBackground 实现,以减少代码路径,并且不再要求在组合过程中创建修饰符。(I0343a)
  • 更新了公开画布的更高级别的 Compose API,改为公开 CanvasScope。这样一来,用户便无需再维护自己的渲染对象。对于仍需要访问画布的使用方,可以使用 drawCanvas 扩展程序方法,该方法提供回调以向底层画布发出绘制命令。(I80afd)
  • withConstraints 尾随 lambda API 已更改。现在,它不是使用两个参数而是使用一个接收器作用域,除了 constraints 和 layoutDirection 之外,还以 Dp 为单位提供 minWidth、maxWidth、minHeight 和 maxHeight 属性(I91b9ab/149979702
  • 新增了对称内边距修饰符。(I39840)
  • 更新了 wrapContentWidth 和 wrapContentHeight,预计会显示垂直或水平 Alignment,而不是任意 Alignment。Gravity 修饰符已更新为接受垂直或水平 Alignment。更新了 Row、Column 和 Stack,以支持自定义的连续 Alignment。(Ib0728)
  • ui-text 模块已重命名为 ui-text-core (I57dec)
  • 改进了 DrawModifier API:
    • 确定了 draw() ContentDrawScope 的接收器范围
    • 移除了 draw() 上的所有参数
    • DrawScope 的接口与之前的 CanvasScope 接口相同
    • ContentDrawScope 具有 drawContent() 方法(Ibacedb/152919067
  • 已废弃 ColoredRect,请改用 Box(Modifier.preferredSize(width, height).drawBackground(color))。(I499fab/152753731
  • 将修饰符以及运算符替换成了出厂扩展函数 (I225e4)
  • 现在可以在 Row 和 Column 之外访问 RowScope 和 ColumnScope 成员。(I3a641)
  • LayoutFlexible 已重命名为 LayoutWeight。“tight”参数已重命名为“fill”。(If4738)
  • WithConstraints 获取了 LayoutDirection 参数 (I6d6f7)
  • 已将 background 重命名为 DrawBackground 并设置为默认记住 (Ia0bd3)
  • 将 ButtonStyle 替换成了不同的函数,并移除了文本(字符串)重载。如需了解使用信息,请参阅更新后的示例。(If63abb/146478620b/146482131
  • runOnIdleComposerunOnUiThread 现在是全局函数,而不是 ComposeTestRule 上的方法。(Icbe8f)

外部贡献

  • 从 Compose 运行时移植层移除了 Looper 和 Handler 等不需要的 API (I6847d)
  • 废弃了没有初始值的 Flow<T>.collectAsState(),改为使用 StateFlow<T> 或传递明确的初始值。(I63f98b/157674865