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