筆者這兩個(gè)月一直在折騰分布式應(yīng)用,并且分別基于 API8 的 FA 模型以及 API9 的 Stage 模型進(jìn)行了開(kāi)發(fā),這兩天總算是基本開(kāi)發(fā)完了,閑下來(lái)總結(jié)下這兩者的區(qū)別,順便跟大家嘮嘮開(kāi)發(fā)時(shí)踩過(guò)的坑。
請(qǐng)求權(quán)限
Stage 模型中配置文件由 FA 模型的 config.json 改為 module.json5,同時(shí)一些字段名也發(fā)生了改變。
例如 reqPermissions 就改為 requestPermissions(好像這個(gè)區(qū)別并不是很起眼,但就是因?yàn)橹拔矣幸粋€(gè)朋友在使用 Stage 模型開(kāi)發(fā)時(shí)直接復(fù)制了 FA 模型的請(qǐng)求權(quán)限代碼,而我一開(kāi)始也沒(méi)看出來(lái)哪里有問(wèn)題,因?yàn)橹徊盍藥讉€(gè)字母,后來(lái)我手敲代碼才找到了問(wèn)題所在)。
FA:
"reqPermissions":[ { "name":"ohos.permission.DISTRIBUTED_DATASYNC" } ]Stage:
"requestPermissions":[ { "name":"ohos.permission.DISTRIBUTED_DATASYNC" } ]
獲取 Context
FA:
letcontext=featureAbility.getContext();Stage Stage 模型中包含多種 Context,比較常用的有 AbilityContext 和在 eTS 頁(yè)面中訪問(wèn) Context。 AbilityContext Stage 模型下,每個(gè) Ability 中都包含了一個(gè) Context 屬性:
在繼承 Ability 的類中通過(guò) this.context 就可以獲取 AbilityContext,從而操作 Ability 的方法(如 startAbility、connectAbility 等)
importAbilityfrom'@ohos.application.Ability' exportdefaultclassMainAbilityextendsAbility{ onCreate(want,launchParam){ this.context.requestPermissionsFromUser(PERMISSIONS) } onWindowStageCreate(windowStage){ letcontext=this.context; } ... };在 eTS 頁(yè)面中訪問(wèn) Context:

//獲取當(dāng)前component關(guān)聯(lián)的Context letcontext=getContext(this)asany
啟動(dòng) Ability
FA:
featureAbility.startAbility({ want:{ bundleName:'com.haoc.distributevideoplayer', abilityName:'com.haoc.distributevideoplayer.MainAbility', deviceId:deviceId, parameters:{ isFA:'FA' } } })
Stage:
context.startAbility({ bundleName:'com.haoc.distributevideoplayer', abilityName:'EntryAbility', deviceId:deviceId, parameters:{ isFA:'FA' } })①Stage 模型不再使用 featureAbility 接口,而需要先獲取當(dāng)前 Ability 的上下文,再由 AbilityContext 調(diào)用 startAbility 方法。 ②相比 FA 模型少了一對(duì){}括號(hào)。 ③MainAbility 改名為 EntryAbility,且 abilityName 不再是由 package + Ability name 組成。
結(jié)語(yǔ)
由于開(kāi)發(fā)時(shí)部分接口在 API9 以上才提供,所以需要將應(yīng)用 API 升級(jí)到 9。 但其實(shí) API9 也提供了 FA 模型,只需要在 API8 的基礎(chǔ)上進(jìn)行小部分修改即可,那筆者為何還花費(fèi)大量精力去折騰 Stage 模型呢? 一個(gè)是想體驗(yàn)一下這兩者在開(kāi)發(fā)上的差別,另一個(gè)是未來(lái)將不再主推 FA 模型,現(xiàn)在學(xué)習(xí)的成本沒(méi)有以后的成本高。 筆者在開(kāi)發(fā)時(shí)還發(fā)現(xiàn)許多接口將被廢棄,例如 Ability,將會(huì)用 UIAbility 代替,不過(guò)接口基本上不會(huì)有很大改變,都是改個(gè)名字、加個(gè)參數(shù)之類。 關(guān)于兩種模型還有什么差別歡迎大家留言討論,文章有錯(cuò)誤之處也歡迎指出。
-
模型
+關(guān)注
關(guān)注
1文章
3520瀏覽量
50419 -
鴻蒙
+關(guān)注
關(guān)注
60文章
2620瀏覽量
44043
原文標(biāo)題:鴻蒙Stage模型和FA模型區(qū)別
文章出處:【微信號(hào):gh_834c4b3d87fe,微信公眾號(hào):OpenHarmony技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
KaihongOS操作系統(tǒng)FA模型與Stage模型介紹
FA模型綁定Stage模型ServiceExtensionAbility介紹
FA模型訪問(wèn)Stage模型DataShareExtensionAbility說(shuō)明
Stage模型啟動(dòng)FA模型PageAbility方法
如何將一個(gè)FA模型開(kāi)發(fā)的聲明式范式應(yīng)用切換到Stage模型
從FA模型切換到Stage模型時(shí):module的切換說(shuō)明
FA模型卡片和Stage模型卡片切換
鴻蒙開(kāi)發(fā)Ability Kit程序框架服務(wù):FA模型與Stage模型應(yīng)用組件互通綜述

鴻蒙開(kāi)發(fā)Ability Kit程序框架服務(wù):FA模型啟動(dòng)Stage模型UIAbility

鴻蒙開(kāi)發(fā)Ability Kit程序框架服務(wù):FA模型綁定Stage模型ServiceExtensionAbility

鴻蒙開(kāi)發(fā)Ability Kit程序框架服務(wù):Stage模型啟動(dòng)FA模型PageAbility

鴻蒙開(kāi)發(fā)Ability Kit程序框架服務(wù):Stage模型綁定FA模型ServiceAbility

鴻蒙開(kāi)發(fā)Ability Kit程序框架服務(wù):FA模型切換Stage模型概述

評(píng)論