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

//獲取當前component關聯的Context letcontext=getContext(this)asany
啟動 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 接口,而需要先獲取當前 Ability 的上下文,再由 AbilityContext 調用 startAbility 方法。 ②相比 FA 模型少了一對{}括號。 ③MainAbility 改名為 EntryAbility,且 abilityName 不再是由 package + Ability name 組成。
結語
由于開發時部分接口在 API9 以上才提供,所以需要將應用 API 升級到 9。 但其實 API9 也提供了 FA 模型,只需要在 API8 的基礎上進行小部分修改即可,那筆者為何還花費大量精力去折騰 Stage 模型呢? 一個是想體驗一下這兩者在開發上的差別,另一個是未來將不再主推 FA 模型,現在學習的成本沒有以后的成本高。 筆者在開發時還發現許多接口將被廢棄,例如 Ability,將會用 UIAbility 代替,不過接口基本上不會有很大改變,都是改個名字、加個參數之類。 關于兩種模型還有什么差別歡迎大家留言討論,文章有錯誤之處也歡迎指出。
-
模型
+關注
關注
1文章
3500瀏覽量
50141 -
鴻蒙
+關注
關注
59文章
2546瀏覽量
43844
原文標題:鴻蒙Stage模型和FA模型區別
文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
FA模型綁定Stage模型ServiceExtensionAbility介紹
FA模型訪問Stage模型DataShareExtensionAbility說明
如何將一個FA模型開發的聲明式范式應用切換到Stage模型
從FA模型切換到Stage模型時:module的切換說明
FA模型卡片和Stage模型卡片切換
鴻蒙開發Ability Kit程序框架服務:FA模型綁定Stage模型ServiceExtensionAbility

評論