淺析Ability框架中Stage模型與FA模型的差異
??想了解更多關(guān)于開源的內(nèi)容,請(qǐng)?jiān)L問:??
Aility框架概述
Ability是應(yīng)用所具備能力的抽象,也是應(yīng)用程序的基本組成單元。OpenHarmony與HarmonyOS的應(yīng)用程序APP由一個(gè)或多個(gè)Hap包組成,每個(gè)Hap可以包含一個(gè)或多個(gè)Ability。
Ability框架模型具有兩種形態(tài),F(xiàn)A模型?以及Stage模型:
- FA模型:OpenHarmony API 8及其更早版本的應(yīng)用程序只能使用FA模型進(jìn)行開發(fā)。FA模型將Ability分為FA(Feature Ability)和PA(Particle Ability)兩種類型,其中FA支持Page Ability,PA支持Service Ability、Data Ability、以及FormAbility。
- Stage模型:從OpenHarmony API 9開始,Ability框架引入了Stage模型作為第二種應(yīng)用框架形態(tài),Stage模型將Ability分為PageAbility和ExtensionAbility兩大類,其中ExtensionAbility又被擴(kuò)展為ServiceExtensionAbility、FormExtensionAbility、DataShareExtensionAbility等一系列ExtensionAbility,以便滿足更多的使用場(chǎng)景。
Stage模型比較新,其被設(shè)計(jì)出來就是為了讓開發(fā)者能更加方便地開發(fā)出分布式環(huán)境的復(fù)雜應(yīng)用,下表是官方給出的兩種模型的設(shè)計(jì)差異:
從表中可以看到,從界面UI開發(fā)上來看,兩者的區(qū)別不大。
FA模型的設(shè)計(jì)特點(diǎn)就是每個(gè)Ability都是小單元,每個(gè)小單元之間都是存在隔閡的,這樣可以讓開發(fā)者專注于定制每個(gè)Ability的特定能力,這樣在簡(jiǎn)單場(chǎng)景下,應(yīng)用的Ability結(jié)構(gòu)會(huì)比較清晰明確。
FA模型與Stage模型差異對(duì)比
進(jìn)程差異
單看每個(gè)進(jìn)程,可以發(fā)現(xiàn)在FA中一個(gè)Ability只允許綁定一個(gè)JS VM(JavaScript虛擬機(jī))引擎,Stage模型中每個(gè)進(jìn)程內(nèi)的JS VM引擎可以被多個(gè)Ability共享,而JS VM(JavaScript虛擬機(jī))引擎的作用可以簡(jiǎn)單理解為讀取應(yīng)用中的JavaScript代碼,然后進(jìn)行相應(yīng)處理,起到一個(gè)解釋器的作用,讓底層可以讀懂開發(fā)人員寫的代碼,所以Stage模型同一個(gè)進(jìn)程內(nèi)的不同Ability之間是存在更多打破隔閡的可能性,涉及到同一個(gè)進(jìn)程內(nèi)多個(gè)Ability直接的交互開發(fā)時(shí),性能也會(huì)更高,同時(shí)支持了一個(gè)非常重要的特性,就是進(jìn)程內(nèi)可以共享對(duì)象,這意味著開發(fā)者不需要考慮線程之間的對(duì)象共享,只需要聚焦在分布式的交互場(chǎng)景上。
生命周期間差異
生命周期的差異主要是圈起來的地方,也是就Ability從后臺(tái)和前臺(tái)之前切換的過程,F(xiàn)A模型中該部分比較簡(jiǎn)單,只有4個(gè)回調(diào)函數(shù),大家看圖也可以理解。
而在Stage模型中,設(shè)計(jì)者將Ability組件與窗口之間進(jìn)行了弱耦合,引入了WindowStage(本地窗口管理器)的概念,WindowStage主要用于處理界面獲焦?fàn)顟B(tài)(前臺(tái)),以及失焦?fàn)顟B(tài)(后臺(tái)),這樣中間層Ability只需要感知前后臺(tái)變化,而不需感知焦點(diǎn)變化,從而實(shí)現(xiàn)Ability組件和窗口之間的解耦。
解耦的目的就是為了支持多種設(shè)備形態(tài)和更易于實(shí)現(xiàn)多種不同的窗口形態(tài),從而方便裁剪,更有利于定制不同的窗口形態(tài)。
組件間差異
從組件上來看,F(xiàn)A模型的Ability組件類型比較固定,而Stage模型的Ability組件類型具備拓展性。