[控场AI]
产品Compose / Jetpack Compose UI

Jetpack Compose

Google于2021年正式发布的Android声明式UI框架,代表从传统View体系向现代响应式范式的转变,支持State Hoisting、MaterialTheme等现代UI开发模式

核心事实

时间轴 (近 90 天)

10月30日

Remote Compose 是全新的 UI 框架,将声明式 API 带入远程 UI 场景,与 Jetpack Compose 高度对齐,并为小组件带来现代图形能力和响应式布局。

待验证50%
10月30日

Jetpack Glance 是 Google 推出的用于构建 App Widgets 的声明式 UI 工具包,基于 Jetpack Compose 的运行时和编译器,针对远程 UI 场景适配,通过中间表示序列化 UI 描述交给宿主渲染,而不是直接操作 RemoteViews。

待验证50%
10月30日

由于无法通过程序构造indirect类型的Motion Event,团队重写了UI测试模块间的通信与队列机制,最终提供performIndirectInput API,与触摸测试高度相似,额外参数用于指定轴向和触控板尺寸。

待验证50%
10月30日

Compose引入primary directional motion axis概念:设备可声明自己的主轴为水平方向,Compose将水平滑动映射为forward/back,再对应到焦点系统的next/previous,在垂直和水平列表上都能开箱即用。

待验证50%
10月30日

Compose新增了performTrackpadInput测试API,形态与既有的鼠标、触摸测试API相似,便于验证应用在不同输入设备下的行为。

待验证50%
10月30日

从Compose 1.12(平移)和1.13(缩放)起,Compose在事件转换阶段拦截平台的“假手指”机制,将其重新解释为pan start/pan move/pan end和scale start/scale change/scale end,并把平台定义的手势直接发送到光标位置对应的命中路径。

待验证50%
10月30日

在Compose 1.12之前,触控板事件被上报为touch类型;Compose将指针类型从touch改为mouse,使任何依赖该信息的组件获得更一致的鼠标与触控板体验,工具提示是典型例子。

待验证50%
10月30日

clickable、scrollable、draggable以及自定义指针输入,全部构建于六阶段指针事件管线之上。

待验证50%
10月30日

事件分发分为initial、main、final三趟:initial从祖先到后代,适合滚动容器拦截事件;main是唯一从后代到祖先的一趟,是处理点击等主要逻辑的地方;final再次从祖先到后代,让子节点得知父节点消费了事件的一部分。

待验证50%
10月30日

在Android开发者峰会上,Compose团队软件工程师Alex Van Nachenberg与Jeremy Walker分享了触屏只是移动应用输入方式的一种,物理键盘、鼠标、触控板、手写笔、手柄、旋钮设备早已存在。

待验证50%

还有 38 条时间轴事件

全部知识事实 (20)

已验证

2021年Google推出了基于Jetpack Compose声明式UI范式的Glance框架用于小组件开发

70%
待验证

Jetpack Glance建立在Android的RemoteViews框架之上,提供Jetpack Compose风格的声明式API

90%
待验证

Android XR通过扩展OpenXR标准与Jetpack XR SDK为开发者提供空间计算能力

85%
待验证

Remote Compose 是全新的 UI 框架,将声明式 API 带入远程 UI 场景,与 Jetpack Compose 高度对齐,并为小组件带来现代图形能力和响应式布局。

50%
待验证

Jetpack Glance 是 Google 推出的用于构建 App Widgets 的声明式 UI 工具包,基于 Jetpack Compose 的运行时和编译器,针对远程 UI 场景适配,通过中间表示序列化 UI 描述交给宿主渲染,而不是直接操作 RemoteViews。

50%
待验证

Compose将指针事件处理管线拆解为六个阶段:Motion Event进入Compose、加入时间维度、命中路径测试、坐标变换、以及initial/main/final三趟分发(第五和第六阶段)。

50%
待验证

专为眼镜开发时可使用Glimmer库中的专用手势检测器,直接获得click、forward和back。

50%
待验证

事件分发分为initial、main、final三趟:initial从祖先到后代,适合滚动容器拦截事件;main是唯一从后代到祖先的一趟,是处理点击等主要逻辑的地方;final再次从祖先到后代,让子节点得知父节点消费了事件的一部分。

50%
待验证

clickable、scrollable、draggable以及自定义指针输入,全部构建于六阶段指针事件管线之上。

50%
待验证

在Compose 1.12之前,触控板事件被上报为touch类型;Compose将指针类型从touch改为mouse,使任何依赖该信息的组件获得更一致的鼠标与触控板体验,工具提示是典型例子。

50%
待验证

Compose引入primary directional motion axis概念:设备可声明自己的主轴为水平方向,Compose将水平滑动映射为forward/back,再对应到焦点系统的next/previous,在垂直和水平列表上都能开箱即用。

50%
待验证

Perfetto trace 记录了设备上主线程、渲染线程、GPU 的工作,对于 Compose 开发者主线程最值得关注,因为组合工作主要发生在这里。

50%
待验证

Compose 的 effect API 构成一条从高功能到低延迟的光谱:LaunchedEffect 功能最全但成本最高,DisposableEffect 适合 setup/teardown 配对,带 key 的 SideEffect(Compose 1.12 引入)是一次性事件的低成本替代,原生 SideEffect 最便宜。

50%
待验证

Jetpack Compose 已成为 Android 开发的默认 UI 工具包。

50%
待验证

Strong skipping 是 Compose 编译器的一项优化模式,允许不稳定参数也参与跳过判断,并对 lambda 等类型采用对象标识相等而非结构相等进行比较。

50%
待验证

Compose 1.13 新增的 computed state 每次读取都重新计算,而 derivedStateOf 缓存计算结果直到依赖变化。

50%
待验证

Compose 的跳过(skipping)本身也有成本:运行时需要在首次组合时保存参数、在重组时更新记录,再逐个比较参数是否变化。

50%
待验证

在包含大量数据的滚动列表场景中,修改最后一个联系人可能导致 lazy list 收到新的 content lambda 后失效所有已组合的项,追踪显示只有两项被真正跳过。

50%
待验证

TextFieldState 是 Compose 1.7 起稳定提供的文本输入解决方案,它在用户输入时同步更新,无需等待异步往返,以满足 IME 的同步需求。

50%
待验证

Notability 的 Android 版本整个 UI 构建在 Jetpack Compose 之上,实现一套代码原生支持从手机到平板、电脑、XR 和汽车等硬件。

50%

来源文章