OpenHarmony使用Stage模型和FA模型開發(fā)分布式應(yīng)用時(shí)的差別
??想了解更多關(guān)于開源的內(nèi)容,請?jiān)L問:??
前言
筆者這兩個(gè)月一直在折騰分布式應(yīng)用,并且分別基于API8的FA模型以及API9的Stage模型進(jìn)行了開發(fā),這兩天總算是基本開發(fā)完了,閑下來總結(jié)下這兩者的區(qū)別,順便跟大家嘮嘮開發(fā)時(shí)踩過的坑
請求權(quán)限
Stage模型中配置文件由FA模型的config.json改為module.json5,同時(shí)一些字段名也發(fā)生了改變,例如reqPermissions就改為requestPermissions(好像這個(gè)區(qū)別并不是很起眼,但就是因?yàn)橹拔矣幸粋€(gè)朋友在使用Stage模型開發(fā)時(shí)直接復(fù)制了FA模型的請求權(quán)限代碼,而我一開始也沒看出來哪里有問題,因?yàn)橹徊盍藥讉€(gè)字母,后來我手敲代碼才找到了問題所在??)。
FA
Stage
獲取Context
FA
Stage
Stage模型中包含多種Context,比較常用的有AbilityContext和在eTS頁面中訪問Context,更多詳見參考資料[1]。
- AbilityContext
Stage模型下,每個(gè)Ability中都包含了一個(gè)Context屬性。
在繼承Ability的類中通過this.context?就可以獲取AbilityContext,從而操作Ability的方法(如startAbility、connectAbility等)。
- 在eTS頁面中訪問Context。
接口名 | 描述 |
getContext(component: Object): Object | 獲取頁面中component所關(guān)聯(lián)的Context對象。 |
啟動(dòng)Ability
FA
Stage
1.Stage模型不再使用featureAbility接口,而需要先獲取當(dāng)前Ability的上下文,再由AbilityContext調(diào)用startAbility方法。
2.相比FA模型少了一對{}括號。
3.MainAbility改名為EntryAbility,且abilityName不再是由package + Ability name組成。
結(jié)語
由于開發(fā)時(shí)部分接口在API9以上才提供,所以需要將應(yīng)用API升級到9。但其實(shí)API9也提供了FA模型,只需要在API8的基礎(chǔ)上進(jìn)行小部分修改即可,那筆者為何還花費(fèi)大量精力去折騰Stage模型呢?一個(gè)是想體驗(yàn)一下這兩者在開發(fā)上的差別,另一個(gè)是未來將不再主推FA模型,現(xiàn)在學(xué)習(xí)的成本沒有以后的成本高。筆者在開發(fā)時(shí)還發(fā)現(xiàn)許多接口將被廢棄,例如Ability,將會用UIAbility代替,不過接口基本上不會有很大改變,都是改個(gè)名字、加個(gè)參數(shù)之類。