ArkUI自定义组件支持跨Ability迁移指南文档示例
介绍
本示例展示了自定义组件支持跨Ability迁移的能力。从API version 24开始,通过在module.json5配置文件中配置metadata,可以使能自定义组件支持跨Ability迁移,使得自定义组件实例在跨Ability后,状态变量的改变仍能触发UI组件刷新。该工程中展示的代码详细描述可查如下链接:
示例文档
效果预览
| 首页 | 跨Ability迁移后 |
|---|---|
![]() |
![]() |
使用说明
-
配置使能跨Ability迁移:在应用工程的module.json5配置文件的metadata标签中,配置name为enableCustomComponentCrossAbility,value为true,来使能自定义组件支持跨Ability迁移。
-
创建BuilderNode节点:在Index页面点击"add node to tree"按钮,创建BuilderNode节点并挂载到NodeContainer下,展示自定义组件。
-
移除BuilderNode节点:点击"remove node from tree"按钮,将BuilderNode节点从NodeContainer上移除,但不销毁节点。
-
拉起新Ability:点击"start new ability"按钮,拉起ExtraAbility,跳转到ExtraIndex页面。
-
跨Ability迁移验证:在ExtraIndex页面中,点击"add node to tree"按钮,将之前创建的BuilderNode节点重新挂载到新的NodeContainer下。此时点击"change message"按钮,可以验证状态变量的改变仍能触发UI刷新,证明自定义组件已成功跨Ability迁移。
-
销毁BuilderNode节点:在ExtraIndex页面点击"dispose node"按钮,销毁BuilderNode节点,释放资源。
工程目录
entry/src/main/ets/
|---entryability
| |---EntryAbility.ets // 主Ability入口
|---entrybackupability
| |---EntryBackupAbility.ets // 备份Ability
|---extraability
| |---ExtraAbility.ets // 额外的Ability,用于接收迁移的组件
|---pages
| |---Index.ets // 应用主页面
| |---ExtraIndex.ets // ExtraAbility页面
| |---MyNodeController.ets // NodeController实现,管理BuilderNode
具体实现
-
使能配置实现:在module.json5的module标签下添加metadata配置,设置name为enableCustomComponentCrossAbility,value为true,启用自定义组件跨Ability迁移能力。
-
BuilderNode管理实现:通过自定义的MyNodeController继承NodeController,管理全局BuilderNode的创建、挂载、移除和销毁。使用全局变量globalBuilderNode保存BuilderNode实例,使其可以在不同Ability间共享。
-
跨Ability迁移流程实现:
- 在Index页面创建BuilderNode并挂载到NodeContainer
- 从NodeContainer移除BuilderNode(不销毁)
- 通过startAbility拉起ExtraAbility
- 在ExtraIndex页面重新将BuilderNode挂载到新的NodeContainer
- 验证组件状态变量更新仍能触发UI刷新
-
状态变量更新验证:自定义组件ComponentUnderBuilderNode使用@State装饰器声明状态变量message,并添加@Watch监听。在跨Ability迁移后,点击按钮修改message的值,可以正常触发UI刷新和@Watch回调,验证迁移成功。
相关权限
不涉及。
依赖
不涉及。
约束与限制
-
本示例仅支持标准系统上运行, 支持设备:华为手机。
-
HarmonyOS系统:HarmonyOS 6.1.1.36及以上。
-
HarmonyOS SDK版本:HarmonyOS 6.1.1.36 SDK及以上。
-
不建议在onBackground阶段异步修改迁移组件中的状态变量。
下载
如需单独下载本工程,执行如下命令:
git init
git config core.sparsecheckout true
echo ArkUISample/EnableCustomComponentCrossAbility > .git/info/sparse-checkout
git remote add origin https://gitcode.com/harmonyos_samples/guide-snippets.git
git pull origin master

