JSFA調用PA之一Ability概念及Ability與Internal Ability
原創??https://harmonyos.51cto.com??
引言
最近一段時間,我會跟大家討論一下JS FA調用Java PA。這部分我打算由淺開始,先看最基礎的東西,然后我們再解讀一下官方給的demo,詳細了解具體如何用代碼實現JS FA 調用Java PA。
所以在這篇文章,主要是一些基礎概念,首先是Ability的概念,然后是JS FA 調用Java PA的兩種方式的區別。理解完這些概念后,可以更好地運用JS FA調用Java PA機制。
Ability
Ability是應用所具備能力的抽象,HarmonyOS的用戶應用程序包APP由一個或多個Hap包組成。每個Hap可以包含一個或多個Ability。Ability分為兩種類型:Feature Ability(簡稱FA)和Particle Ability(簡稱PA),Ability是HarmonyOS應用的基本組成單元,能夠實現特定的業務功能。
FA有UI界面,而PA無UI界面。
FA有多種展現形式,如普通界面形式Page Ability,服務卡片形式Form等,一般使用JS 語言實現前臺界面。PA支持ServiceAbility和Data Ability。ServiceAbility提供后臺運行任務的能力,如處理復雜后臺任務等。Data Ability用于對外部提供統一的數據訪問抽象。這兩個Ability一般使用Java 語言實現。
上面三段話是比較官方的解釋,我們現在就Ability這個單詞理解,它翻譯過來就是能力,說白了,Ability就是一個完整的能力模塊(具備完整的邏輯),并且它是一個應用的最小組成單位。
下面我們舉個例子來更深地理解Ability,現在就假設我們要做一個簡單的音樂播放應用。
首先從結構上來看,這個APP只有一個Hap,Hap下面就對應著具體的每個功能模塊(也就是每個Ability),分別是播放器界面顯示模塊(FA—Page Ability),音樂控制模塊(PA—Service Ability)和音樂數據訪問模塊(PA—Data Ability)。
當然,這個APP也可以由多個Hap組成,比如:
下面我們就來看看為什么說Ability就是一個完整的能力模塊。
FA—Page Ability
首先是播放器界面顯示模塊(FA—Page Ability),因為它像Web前端開發范式一樣,具備頁面的渲染和頁面之間的簡單邏輯處理,所以是一個完整的功能模塊,也就滿足了我剛剛說的Ability概念。
PA—Service Ability
接著就是音樂控制模塊(PA—Service Ability),這部分也類比一下我們常見Web開發范式,它就像后端編寫的一些復雜邏輯處理的功能接口,比如隨機播放音樂,還是順序播放音樂,當FA(前端)調用該PA(后端音樂播放方式接口)時,就可以獲得該能力。一個接口當然具備完整的邏輯處理能力,也是一個完整的功能模塊,也就滿足了我剛剛說的Ability概念。
PA—Data Ability
最后是我們的音樂數據訪問模塊(PA—Data Ability),我們把它類比成Web開發范式的后端數據庫,里面存儲著音頻文件,音樂封面,用戶評論等數據,而要拿到這些數據,那我們就需要訪問這個數據庫。可以看出,這個也是一個完整的能力模塊,它負責著整個應用的數據訪問和存儲。
到這里相信大家都已經知道了Ability大概是啥了,下面附一張他們之間的關系圖
該圖來源于:https://harmonyos.51cto.com/posts/10189
JS FA 調用 Java PA的兩種方式
剛剛說到了FA(前端)調用該PA(后端音樂播放方式接口),這個過程其實就是JS FA 調用 Java PA,它可以類比成Web開發范式中前端對后端的接口請求。
而JS FA 調用 Java PA是有兩種方式的,分別是Ability和Internal Ability
Ability調用方式
Ability方式,與FA通過RPC方式通信,該方式的優點在于PA可以被多個不同的FA調用。
Internal Ability調用方式
Internal Ability方式,集成在FA中,適用于與FA業務邏輯關聯性強,響應時延要求高的服務。該方式僅支持本FA訪問調用。
區別
從上面兩張圖我們可以看到,Ability方式中PA是一個單獨的進程,而InternalAbility方式中FA和PA是在同一個進程。
因為后者PA和FA在同一個進程中,相互通信快,所以對于延時低,性能高或者復用性不高的PA需求,就采用InternalAbility調用方式。
當該PA復用性高,需要被多個不同的FA調用時,就采用Ability調用方式。
小結
今天這篇文章主要講地了Ability還有兩種調用方式,這幾天我還會更新用具體案例來講解Ability,InternalAbility兩種調用方式的具體實現方式。
??https://harmonyos.51cto.com??