Jetpack Compose 是如何在引擎盖下工作的

How does jetpack compose work under the hood

Arch 组件新增的 Jetpack compose 组件就像 Flutter Ui 制作

它是如何制作 Ui 的?

它是使用像Skia这样的原生代码引擎,还是像以前一样沿用ViewGroup的方式?

不,它没有使用旧 UI 工具包中的任何东西,实际上他们正在构建它来克服旧 UI 工具包的问题。

Compose 不是视图,它是一套新的 Jetpack UI Widget,基本上,它是一个 Kotlin 编译器插件,呈现 Android Canvas(我想没有文档this yet) 与现有 android 的视图系统完全兼容,上次 Dev 峰会也有 talk covers how it works internally, I/O had another talk

Compose 创建一个当前名为 AndroidComposeView 的视图,它继承了 ViewGroup,并在其 canvas 上绘制了小部件树。它还处理此视图的 motion/keyboard 个事件。

由于实现细节,可能会有更多辅助视图添加到此视图中,但基本上对于 Compose "widgets",您不会在视图层次结构中看到经典视图。布局检查器目前对 Compose 没有帮助 - 您可以尝试一下,但您将看不到您的小部件。

开发人员承诺能够创建自己的自定义小部件,这些小部件可以直接在 Canvas 上绘制、为自身或子项设置布局或处理输入事件。

但是,Canvas 和此处使用的许多其他 类 不是标准框架 类。例如,Canvas for Compose 在 Kotlin 中被重新定义。类似的方式还有新的PaintShape和其他新的类。他们在内部使用框架 类 进行工作,但那是实现细节。绘图时,您会使用这些新的 类.

由于 Compose 是一个库,而不是 Android 设备上原生存在的库,因此该库包含在每个使用 Compose 的应用程序中。 此外,此处不涉及本机代码,所有内容均在 Kotlin 中完成,并成为应用程序的 dexed 代码的一部分。通过使用 Compose,您的应用将不会包含任何额外的本机库(如果创作者不改变主意的话,可能是这样)。