使用FeatureAbility模塊啟動(dòng)其他Ability

1 前言

在HarmonyOS/OpenHarmony應(yīng)用程序中一切皆Ability(能力),即是每個(gè)界面都可以是Ability,每個(gè)功能都可以是Ability,又將Ability分為FA(FeatureAbility)和PA(ParticleAbility)兩種類型。其中FA唯一支持的模板Page Ability,其用于提供與用戶交互能力,在設(shè)備主界面上有可見的桌面圖標(biāo),能夠通過圖標(biāo)啟動(dòng)應(yīng)用程序進(jìn)行交互操作;而PA又分為Service Ability和Data Ability,前者用于提供后臺(tái)運(yùn)行任務(wù)的能力,后者用于應(yīng)用管理自身和其他應(yīng)用存儲(chǔ)數(shù)據(jù)的訪問能力,因此PA是無界面的,用戶無法對(duì)其直接操作,可以和FA配合使用。

在JS/eTS語言中,Ability框架又被分為FA模型和Stage模型(該模型目前僅支持OpenHarmony API9)。在DevEco Studio 3.0 Beta4中HarmonyOS使用了OpenHarmony API8,因此可以大膽猜測一下后續(xù)API版本會(huì)不會(huì)以O(shè)penHarmony API版本為主。 本節(jié)以API8為主,關(guān)于Stage模型的詳細(xì)介紹將在今后的章節(jié)中介紹。此處的FA是一種模型,其中的Ability分為PageAbility、ServiceAbility、DataAbility、FormAbility,與FA(FeatureAbility不能混淆)。

  • PageAbility 是用戶可見并可交互的Ability實(shí)例,可開發(fā)在設(shè)備主界面上具有入口圖標(biāo)的應(yīng)用程序;
  • ServiceAbility 運(yùn)行在后臺(tái)的、無界面的,用戶不可直接操作的,可以通過Page Ability調(diào)起;
  • DataAbility 為其他Ability提供數(shù)據(jù)訪問的支撐,也是運(yùn)行在后臺(tái)的、無界面的;
  • FormAbility 是卡片Ability,是一種新型的Ability,用于呈現(xiàn)特定信息的入口界面。

JS/eTS語言是方舟開發(fā)框架(ArkUI)為開發(fā)者開發(fā)應(yīng)用程序提供的兩種開發(fā)范式,前者是基于JS擴(kuò)展的類Web開發(fā)范式,若開發(fā)者具備小程序開發(fā)經(jīng)驗(yàn)則可直接上手,更傾向于Web前端開發(fā)人員;而后者則是基于TS擴(kuò)展的聲明式開發(fā)范式,與Flutter開發(fā)應(yīng)用程序類似,更傾向于移動(dòng)系統(tǒng)應(yīng)用和系統(tǒng)應(yīng)用開發(fā)人員。

2 準(zhǔn)備工作

  • 開發(fā)工具:DevEco Studio 3.0 Beta4
  • 運(yùn)行設(shè)備:P50(HarmonyOS3.0) / DAYU200(OpenHarmony 3.0 Beta2)
  • 桌面工具:Scrcpy(用于在PC桌面上共享P50界面,OpenHarmony暫無)
  • 使用DevEco Studio創(chuàng)建開發(fā)語言為eTS語言,編譯版本為8,項(xiàng)目名稱為FaeTSSample的HarmonyOS應(yīng)用程序(由于DevEco Studio 3.0 Beta4特性,HarmonyOS和OpenHarmony互通,當(dāng)前HarmonyOS的應(yīng)用程序可以直接運(yùn)行在OpenHarmony操作系統(tǒng)的設(shè)備上)

3 有界面的PageAbility

通過DevEco Studio創(chuàng)建Application(應(yīng)用程序)會(huì)默認(rèn)創(chuàng)建PageAbility模板代碼,在ArkUI框架中,PageAbility相關(guān)能力是通過單獨(dú)的featureAbility模塊實(shí)現(xiàn)的,其由于為用戶提供了可交互的界面,因此生命周期較于其他Ability復(fù)雜度較高,PageAbility生命周期回調(diào)通過app.js/app.ets中的函數(shù)實(shí)現(xiàn),當(dāng)前app.js僅支持onCreateonDestroy回調(diào),而app.ets支持全量生命周期回調(diào),本節(jié)以eTS語言為主,主要介紹eTS語言開發(fā)中PageAbility生命周期回調(diào),如下圖所示:

image.png

可以在app.ets中將所有的聲明周期函數(shù)重寫,并運(yùn)行應(yīng)用程序查看聲明周期回調(diào)信息,代碼如下所示:

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')
  },
}
image.png

3.1 使用featureAbility模塊啟動(dòng)本地PageAbility

HarmonyOS/OpenHarmony為用戶提供了路由跳轉(zhuǎn)方式,而路由跳轉(zhuǎn)方式是頁面間跳轉(zhuǎn),可以利用featureAbility模塊進(jìn)行Ability之間的跳轉(zhuǎn),并且featureAbility僅能在PageAbility類型的Ability中調(diào)用。

使用featureAbility模塊需要先在具體的業(yè)務(wù)邏輯界面使用以下代碼引入模塊:

import featureAbility from '@ohos.ability.featureAbility';

featureAbility模塊提供了多個(gè)方法用于啟動(dòng)新的Ability、獲取dataAbilityHelper、設(shè)置此PageAbility、獲取當(dāng)前Ability對(duì)應(yīng)的窗口、連接服務(wù)等能力。featureAbility提供的啟動(dòng)新Ability能力如下表所示:

名稱 描述
startAbility 啟動(dòng)新的Ability
startAbilityForResult 啟動(dòng)新的Ability,并在該Ability被銷毀時(shí)返回執(zhí)行結(jié)果

接下來聊聊在應(yīng)用程序中如何啟動(dòng)新的Ability,首先在項(xiàng)目entry目錄右鍵New-->Ability --> Page Ability,填寫Ability相關(guān)信息如下圖所示。

image.png

目錄結(jié)構(gòu)如下圖所示:

image.png

startAbility方法有兩種調(diào)用形式,一種是callback,另一種是Promise,都需要傳遞StartAbilityParameter參數(shù)設(shè)定目標(biāo)Ability。

startAbility(StartAbilityParameter, AsyncCallback<number>): void
startAbility(StartAbilityParameter): Promise<number>

其中StartAbilityParameter參數(shù)由Want(包含有關(guān)目標(biāo)Ability信息)和abilityStartSetting(可以通過該屬性攜帶參數(shù),不是必須條件)。其中國Want參數(shù)提供系統(tǒng)的基本通信能力,比如在打開時(shí)指定新啟動(dòng)的Ability信息,或者銷毀啟動(dòng)的Ability后返回的額外信息。點(diǎn)擊MainAbility中的按鈕啟動(dòng)SecondAbility,修改代碼如下所示:

// MainAbility/page/index.ets
featureAbility.startAbility({
  want: {
    bundleName: "com.tetcl.fts", // 包描述,對(duì)應(yīng)config.json中的app.bundleName,當(dāng)然也可以是本機(jī)其他應(yīng)用的包名
    abilityName: "com.example.entry.SecondAbility" // 目標(biāo)Ability名稱,對(duì)應(yīng)config.json中的module.package.類名
  }
})

使用真機(jī)設(shè)備運(yùn)行應(yīng)用程序,點(diǎn)擊按鈕,查看是否跳轉(zhuǎn)到Second Ability界面。

image.png

3.2 使用featureAbility模塊啟動(dòng)遠(yuǎn)程PageAbility

在Want模塊中,有一個(gè)deviceId屬性,該屬性表示運(yùn)行指定Ability的設(shè)備ID,也就是若我們知道了其他設(shè)備的標(biāo)識(shí)碼和包名稱以及具體的Ability名稱,我們就可以啟動(dòng)其他設(shè)備的應(yīng)用程序。該屬性的值需要使用DeviceManager模塊的接口獲取,當(dāng)前僅對(duì)系統(tǒng)應(yīng)用開放,也就是自定義的應(yīng)用程序是無法調(diào)起它的Ability。由于設(shè)備有限,無法提供測試,因此具體的操作詳見官方文檔。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容