

使用FeatureAbility模块启动其他Ability
source link: https://www.51cto.com/article/718259.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

使用FeatureAbility模块启动其他Ability

在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中将所有的声明周期函数重写,并运行应用程序查看声明周期回调信息,代码如下所示:
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')
},
}

(1)使用featureAbility模块启动本地PageAbility
HarmonyOS/OpenHarmony为用户提供了路由跳转方式,而路由跳转方式是页面间跳转,可以利用featureAbility模块进行Ability之间的跳转,并且featureAbility仅能在PageAbility类型的Ability中调用。
使用featureAbility模块需要先在具体的业务逻辑界面使用以下代码引入模块:
import featureAbility from '@ohos.ability.featureAbility';
featureAbility模块提供了多个方法用于启动新的Ability、获取dataAbilityHelper、设置此PageAbility、获取当前Ability对应的窗口、连接服务等能力。featureAbility提供的启动新Ability能力如下表所示:
startAbility | 启动新的Ability |
startAbilityForResult | 启动新的Ability,并在该Ability被销毁时返回执行结果 |
接下来聊聊在应用程序中如何启动新的Ability,首先在项目entry目录右键New–>Ability --> Page Ability,填写Ability相关信息如下图所示。

目录结构如下图所示:

startAbility方法有两种调用形式,一种是callback,另一种是Promise,都需要传递StartAbilityParameter参数设定目标Ability。
startAbility(StartAbilityParameter, AsyncCallback<number>): void
startAbility(StartAbilityParameter): Promise<number>
其中StartAbilityParameter参数由Want(包含有关目标Ability信息)和abilityStartSetting(可以通过该属性携带参数,不是必须条件)。其中国Want参数提供系统的基本通信能力,比如在打开时指定新启动的Ability信息,或者销毁启动的Ability后返回的额外信息。点击MainAbility中的按钮启动SecondAbility,修改代码如下所示:
// MainAbility/page/index.ets
featureAbility.startAbility({
want: {
bundleName: "com.tetcl.fts", // 包描述,对应config.json中的app.bundleName,当然也可以是本机其他应用的包名
abilityName: "com.example.entry.SecondAbility" // 目标Ability名称,对应config.json中的module.package.类名
}
})
使用真机设备运行应用程序,点击按钮,查看是否跳转到Second Ability界面。

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