写点什么

使用 FeatureAbility 模块启动其他 Ability

作者:白晓明
  • 2022 年 9 月 02 日
    宁夏
  • 本文字数:2411 字

    阅读完需:约 8 分钟

使用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 仅支持onCreateonDestroy回调,而 app.ets 支持全量生命周期回调,本节以 eTS 语言为主,主要介绍 eTS 语言开发中 PageAbility 生命周期回调,如下图所示:



可以在 app.ets 中将所有的声明周期函数重写,并运行应用程序查看声明周期回调信息,代码如下所示:


export default {  onCreate() {    console.info('FaeTSSample Application onCreate')  },  onActive() {    console.info('FaeTSSample Application onActive')  },  onInactive() {    console.info('FaeTSSample Application onInactive')  },  onHide() {    console.info('FaeTSSample Application onHide')  },  onShow() {    console.info('FaeTSSample Application onShow')  },  onDestroy() {    console.info('FaeTSSample Application onDestroy')  },}
复制代码


3.1 使用 featureAbility 模块启动本地 PageAbility

HarmonyOS/OpenHarmony 为用户提供了路由跳转方式,而路由跳转方式是页面间跳转,可以利用 featureAbility 模块进行 Ability 之间的跳转,并且 featureAbility 仅能在 PageAbility 类型的 Ability 中调用。


使用 featureAbility 模块需要先在具体的业务逻辑界面使用以下代码引入模块:


import featureAbility from '@ohos.ability.featureAbility';
复制代码


featureAbility 模块提供了多个方法用于启动新的 Ability、获取 dataAbilityHelper、设置此 PageAbility、获取当前 Ability 对应的窗口、连接服务等能力。featureAbility 提供的启动新 Ability 能力如下表所示:



接下来聊聊在应用程序中如何启动新的 Ability,首先在项目 entry 目录右键 New-->Ability --> Page Ability,填写 Ability 相关信息如下图所示。



目录结构如下图所示:



startAbility 方法有两种调用形式,一种是 callback,另一种是 Promise,都需要传递 StartAbilityParameter 参数设定目标 Ability。


startAbility(StartAbilityParameter, AsyncCallback<number>): voidstartAbility(StartAbilityParameter): Promise<number>
复制代码


其中 StartAbilityParameter 参数由 Want(包含有关目标 Ability 信息)和 abilityStartSetting(可以通过该属性携带参数,不是必须条件)。其中国 Want 参数提供系统的基本通信能力,比如在打开时指定新启动的 Ability 信息,或者销毁启动的 Ability 后返回的额外信息。点击 MainAbility 中的按钮启动 SecondAbility,修改代码如下所示:


// MainAbility/page/index.etsfeatureAbility.startAbility({  want: {    bundleName: "com.tetcl.fts", // 包描述,对应config.json中的app.bundleName,当然也可以是本机其他应用的包名    abilityName: "com.example.entry.SecondAbility" // 目标Ability名称,对应config.json中的module.package.类名  }})
复制代码


使用真机设备运行应用程序,点击按钮,查看是否跳转到 Second Ability 界面。


3.2 使用 featureAbility 模块启动远程 PageAbility

在 Want 模块中,有一个 deviceId 属性,该属性表示运行指定 Ability 的设备 ID,也就是若我们知道了其他设备的标识码和包名称以及具体的 Ability 名称,我们就可以启动其他设备的应用程序。该属性的值需要使用 DeviceManager 模块的接口获取,当前仅对系统应用开放,也就是自定义的应用程序是无法调起它的 Ability。由于设备有限,无法提供测试,因此具体的操作详见官方文档。

发布于: 刚刚阅读数: 3
用户头像

白晓明

关注

还未添加个人签名 2021.03.10 加入

还未添加个人简介

评论

发布
暂无评论
使用FeatureAbility模块启动其他Ability_OpenHarmony应用开发_白晓明_InfoQ写作社区