Kotlin logo

Kotlin

A concise multiplatform language developed by JetBrains

Multiplatform

Compose Multiplatform 1.7.0 现已发布

Read this post in other languages:

Compose Multiplatform 是由 JetBrains 开发的声明式 UI 框架,允许开发者跨平台共享 UI 实现。 1.7.0 版本带来了更多通用代码组件、类型安全导航支持、iOS 的显著性能提升,以及最新 Jetpack Compose 更新中的更改。

此版本的亮点如下:

  • Material3 adaptiveWindowSizeClass 现在可用于通用代码中。
  • Compose Multiplatform 现在可为导航图提供编译时安全。
  • Compose Multiplatform 1.7.0 与 Kotlin 2.0.20 配合使用后,在 iOS 上的运行速度和流畅度较之前的稳定版本有显著提升。

有关完整的更改列表,请参阅“最新变化”页面GitHub 上的版本说明

Compose Multiplatform 使用入门

新通用模块

在 Compose Multiplatform 1.7.0 发布后,以下组件已在通用代码中可用:

  • material3.adaptive 中的 Material3 自适应模块快,例如 adaptiveadaptive-layoutadaptive-navigation
  • Material3 自适应导航套件。
  • Material3 WindowSizeClass 类。
  • material-navigation 库。

类型安全导航

您现在可以依赖 Compose Multiplatform 在导航图中实现编译时安全。 为确保类型安全,我们采用了 Jetpack Compose 的类型安全方式沿导航路由传递对象。

请参阅 Navigation Compose 中的类型安全指南了解 API 详细信息。

iOS 上的性能改进

在 Kotlin 2.0.20 中,Kotlin/原生团队为提高 Compose 应用在 iOS 上的运行速度和流畅度做出了巨大贡献。 Compose Multiplatform 1.7.0 版本充分利用了这些优化以及 Jetpack Compose 1.7.0 中的性能改进。

我们对搭配 Kotlin 2.0.0 使用的 Compose Multiplatform 1.6.11 与搭配 Kotlin 2.0.20 使用的 Compose Multiplatform 1.7.0 进行了基准测试,对比结果表明,新版本在以下方面有所改进:

  • LazyGrid 基准测试模拟了最接近真实用例的 LazyVerticalGrid 滚动,测试表明,运行速度平均提高了 9% 左右。 该测试还表明丢帧数量显著减少。 请查看下面的 p1/p50 百分位图:图表明帧的稳定性有所提高,并证实了现在几乎不存在丢帧现象,这是因为平均处理时间短于 120Hz iPhone 屏幕 8.33 ms 的标准延迟。
  • VisualEffects 基准测试渲染了许多随机放置的组件,且运行速度提高了 3.6 倍 – 每 1000 帧的 CPU 平均耗时从 8.8 秒缩短至 2.4 秒。
  • AnimatedVisibility 可组合项以动画形式演示了图像的显示和隐藏,并证明渲染速度提高了 6% 左右。
滚动 LazyVerticalGrid 通过 VisualEffects 渲染 1000 个帧

您可以自行测试,并告诉我们您是否感受到 iOS App 的流畅度有所提升!

除此之外,Kotlin 2.0.20 还在垃圾回收器 (GC) 中引入了对并发标记的实验性支持。 启用并发标记可以缩短 GC 暂停时间,并证明可以在所有基准测试中实现更大的提升。 根据我们的测算,LazyGrid 基准测试的丢帧数量仅为之前的一半,且最差 p25 GC 暂停时间从 1.7 ms 降至 0.4 ms。 试用并分享您的反馈。

更新为 Compose Multiplatform 1.7.0

改进了 Compose Multiplatform 与原生 iOS 之间的触控互操作

此版本改进了 iOS 互操作视图的触控处理。 想象在一个可滚动上下文(例如延迟列表)中使用一个大型互操作视频播放器 – 如果大部分屏幕区域被视频占据,且视频会拦截所有触控操作,而 Compose Multiplatform 却无法感知这些触控操作,那么滚动浏览列表将是一种非常不愉快的体验。

Compose Multiplatform 现在会尝试检测触控操作是否适用于互操作视图,或是否应由 Compose 对触控操作进行处理。 这样一来,您可以在您的 Compose Multiplatform 应用中处理 UIKit 或 SwiftUI 区域中发生的触控事件。

请参阅我们的在 iOS 上使用互操作处理触控事件文档页面了解详情。

在桌面上拖放

Compose Multiplatform 1.7.0 实现了桌面拖放。 您现在可以使用 dragAndDropSourcedragAndDropTarget 修饰符指定哪一个可组合项是起始拖动点,哪一个可组合函数用于接收放置的数据。

在桌面上拖放

共用元素过渡

Compose Multiplatform 现在支持在共用一致元素的可组合项之间实现无缝过渡。 这类过渡通常用于导航,帮助用户跟踪 UI 的变化轨迹。 请查阅 Jetpack Compose 文档了解 API 和 Android 示例的详细信息,并在其他平台上尝试一下新动画。

共用元素过渡

资源更新和改进

此版本带来了各种资源更新,我们来看一下最值得大家关注的更新:

  • 资源库现在支持在 Compose Multiplatform 项目中使用测试资源。
  • 所有多平台资源现在均打包到 Android 资源中,因此 Android Studio 可为 Android 源集中的 Compose Multiplatform 可组合项生成预览。
  • 现在,通过 URI,您可以从 WebView 和媒体播放器等外部库直接访问 Android 资源。
  • 利用配置 DSL 中新增的 customDirectory 设置,您可以将自定义目录与特定源集相关联。
  • 资源现在映射到字符串 ID,方便大家使用。

其他文章

本博文英文原作者:

Elvira Mustafina

Elvira Mustafina

image description

Discover more