使用 FeatureAbility 模块启动其他 Ability
1 前言
在 HarmonyOS/OpenHarmony 应用程序中一切皆 Ability(能力),即是每个界面都可以是 Ability,每个功能都可以是 Ability,又将 Ability 分为 FA(FeatureAbility)和 PA(ParticleAbility)两种类型。其中 FA 唯一支持的模板 Page Ability,其用于提供与用户交互能力,在设备主界面上有可见的桌面图标,能够通过图标启动应用程序进行交互操作;而 PA 又分为 Service Ability 和 Data Ability,前者用于提供后台运行任务的能力,后者用于应用管理自身和其他应用存储数据的访问能力,因此 PA 是无界面的,用户无法对其直接操作,可以和 FA 配合使用。
在 JS/eTS 语言中,Ability 框架又被分为 FA 模型和 Stage 模型(该模型目前仅支持 OpenHarmony API9)。在 DevEco Studio 3.0 Beta4 中 HarmonyOS 使用了 OpenHarmony API8,因此可以大胆猜测一下后续 API 版本会不会以 OpenHarmony API 版本为主。 本节以 API8 为主,关于 Stage 模型的详细介绍将在今后的章节中介绍。此处的 FA 是一种模型,其中的 Ability 分为 PageAbility、ServiceAbility、DataAbility、FormAbility,与 FA(FeatureAbility 不能混淆)。
PageAbility 是用户可见并可交互的 Ability 实例,可开发在设备主界面上具有入口图标的应用程序;
ServiceAbility 运行在后台的、无界面的,用户不可直接操作的,可以通过 Page Ability 调起;
DataAbility 为其他 Ability 提供数据访问的支撑,也是运行在后台的、无界面的;
FormAbility 是卡片 Ability,是一种新型的 Ability,用于呈现特定信息的入口界面。
JS/eTS 语言是方舟开发框架(ArkUI)为开发者开发应用程序提供的两种开发范式,前者是基于 JS 扩展的类 Web 开发范式,若开发者具备小程序开发经验则可直接上手,更倾向于 Web 前端开发人员;而后者则是基于 TS 扩展的声明式开发范式,与 Flutter 开发应用程序类似,更倾向于移动系统应用和系统应用开发人员。
2 准备工作
开发工具:DevEco Studio 3.0 Beta4
运行设备:P50(HarmonyOS3.0) / DAYU200(OpenHarmony 3.0 Beta2)
桌面工具:Scrcpy(用于在 PC 桌面上共享 P50 界面,OpenHarmony 暂无)
使用 DevEco Studio 创建开发语言为 eTS 语言,编译版本为 8,项目名称为 FaeTSSample 的 HarmonyOS 应用程序(由于 DevEco Studio 3.0 Beta4 特性,HarmonyOS 和 OpenHarmony 互通,当前 HarmonyOS 的应用程序可以直接运行在 OpenHarmony 操作系统的设备上)
3 有界面的 PageAbility
通过 DevEco Studio 创建 Application(应用程序)会默认创建 PageAbility 模板代码,在 ArkUI 框架中,PageAbility 相关能力是通过单独的 featureAbility 模块实现的,其由于为用户提供了可交互的界面,因此生命周期较于其他 Ability 复杂度较高,PageAbility 生命周期回调通过 app.js/app.ets 中的函数实现,当前 app.js 仅支持onCreate
和onDestroy
回调,而 app.ets 支持全量生命周期回调,本节以 eTS 语言为主,主要介绍 eTS 语言开发中 PageAbility 生命周期回调,如下图所示:
可以在 app.ets 中将所有的声明周期函数重写,并运行应用程序查看声明周期回调信息,代码如下所示:
3.1 使用 featureAbility 模块启动本地 PageAbility
HarmonyOS/OpenHarmony 为用户提供了路由跳转方式,而路由跳转方式是页面间跳转,可以利用 featureAbility 模块进行 Ability 之间的跳转,并且 featureAbility 仅能在 PageAbility 类型的 Ability 中调用。
使用 featureAbility 模块需要先在具体的业务逻辑界面使用以下代码引入模块:
featureAbility 模块提供了多个方法用于启动新的 Ability、获取 dataAbilityHelper、设置此 PageAbility、获取当前 Ability 对应的窗口、连接服务等能力。featureAbility 提供的启动新 Ability 能力如下表所示:
接下来聊聊在应用程序中如何启动新的 Ability,首先在项目 entry 目录右键 New-->Ability --> Page Ability,填写 Ability 相关信息如下图所示。
目录结构如下图所示:
startAbility 方法有两种调用形式,一种是 callback,另一种是 Promise,都需要传递 StartAbilityParameter 参数设定目标 Ability。
其中 StartAbilityParameter 参数由 Want(包含有关目标 Ability 信息)和 abilityStartSetting(可以通过该属性携带参数,不是必须条件)。其中国 Want 参数提供系统的基本通信能力,比如在打开时指定新启动的 Ability 信息,或者销毁启动的 Ability 后返回的额外信息。点击 MainAbility 中的按钮启动 SecondAbility,修改代码如下所示:
使用真机设备运行应用程序,点击按钮,查看是否跳转到 Second Ability 界面。
3.2 使用 featureAbility 模块启动远程 PageAbility
在 Want 模块中,有一个 deviceId 属性,该属性表示运行指定 Ability 的设备 ID,也就是若我们知道了其他设备的标识码和包名称以及具体的 Ability 名称,我们就可以启动其他设备的应用程序。该属性的值需要使用 DeviceManager 模块的接口获取,当前仅对系统应用开放,也就是自定义的应用程序是无法调起它的 Ability。由于设备有限,无法提供测试,因此具体的操作详见官方文档。
版权声明: 本文为 InfoQ 作者【白晓明】的原创文章。
原文链接:【http://xie.infoq.cn/article/3202706b0f6958801e8da98a4】。
本文遵守【CC BY-NC-ND】协议,转载请保留原文出处及本版权声明。
评论