ArkTS卡片運行機制

2024-01-25 12:16 更新

實現(xiàn)原理

圖1 ArkTS卡片實現(xiàn)原理
  • 卡片使用方:顯示卡片內(nèi)容的宿主應(yīng)用,控制卡片在宿主中展示的位置,當(dāng)前僅系統(tǒng)應(yīng)用可以作為卡片使用方。
  • 卡片提供方:提供卡片顯示內(nèi)容的應(yīng)用,控制卡片的顯示內(nèi)容、控件布局以及控件點擊事件。
  • 卡片管理服務(wù):用于管理系統(tǒng)中所添加卡片的常駐代理服務(wù),提供formProvider接口能力,同時提供卡片對象的管理與使用以及卡片周期性刷新等能力。
  • 卡片渲染服務(wù):用于管理卡片渲染實例,渲染實例與卡片使用方上的卡片組件一一綁定??ㄆ秩痉?wù)運行卡片頁面代碼widgets.abc進行渲染,并將渲染后的數(shù)據(jù)發(fā)送至卡片使用方對應(yīng)的卡片組件。
圖2 ArkTS卡片渲染服務(wù)運行原理

與JS卡片相比,ArkTS卡片支持在卡片中運行邏輯代碼,為確保ArkTS卡片發(fā)生問題后不影響卡片使用方應(yīng)用的使用,ArkTS卡片新增了卡片渲染服務(wù)用于運行卡片頁面代碼widgets.abc,卡片渲染服務(wù)由卡片管理服務(wù)管理??ㄆ褂梅降拿總€卡片組件都對應(yīng)了卡片渲染服務(wù)里的一個渲染實例,同一應(yīng)用提供方的渲染實例運行在同一個虛擬機運行環(huán)境中,不同應(yīng)用提供方的渲染實例運行在不同的虛擬機運行環(huán)境中,通過虛擬機運行環(huán)境隔離不同應(yīng)用提供方卡片之間的資源與狀態(tài)。開發(fā)過程中需要注意的是globalThis對象的使用,相同應(yīng)用提供方的卡片globalThis對象是同一個,不同應(yīng)用提供方的卡片globalThis對象是不同的。

ArkTS卡片的優(yōu)勢

卡片作為應(yīng)用的一個快捷入口,ArkTS卡片相較于JS卡片具備如下幾點優(yōu)勢:

  • 統(tǒng)一開發(fā)范式,提升開發(fā)體驗和開發(fā)效率。

    OpenHarmony在2022年發(fā)布了聲明式范式的UI開發(fā)框架,而卡片還延續(xù)了css/hml/json三段式類Web范式的開發(fā)方式,提高了開發(fā)者的學(xué)習(xí)成本,提供ArkTS卡片能力后,統(tǒng)一了卡片和頁面的開發(fā)范式,頁面的布局可以直接復(fù)用到卡片布局中,提升開發(fā)體驗和開發(fā)效率。

    圖3 卡片工程結(jié)構(gòu)對比
  • 增強了卡片的能力,使卡片更加萬能。
    • 新增了動效的能力:ArkTS卡片開放了屬性動畫顯式動畫的能力,使卡片的交互更加友好。
    • 新增了自定義繪制的能力:ArkTS卡片開放了Canvas畫布組件,卡片可以使用自定義繪制的能力構(gòu)建更多樣的顯示和交互效果。
    • 允許卡片中運行邏輯代碼:開放邏輯代碼運行后很多業(yè)務(wù)邏輯可以在卡片內(nèi)部自閉環(huán),拓寬了卡片的業(yè)務(wù)適用場景。

ArkTS卡片的約束

ArkTS卡片相較于JS卡片具備了更加豐富的能力,但也增加了使用卡片進行惡意行為的風(fēng)險。由于ArkTS卡片顯示在使用方應(yīng)用中,使用方應(yīng)用一般為桌面應(yīng)用,為確保桌面的使用體驗以及功耗相關(guān)考慮,對ArkTS卡片的能力做了以下約束:

  • 不支持加載so。
  • 不支持使用native語言開發(fā)。
  • 僅支持聲明式范式的部分組件、事件、動效、數(shù)據(jù)管理、狀態(tài)管理和API能力。
  • 卡片的事件處理和使用方的事件處理是獨立的,建議在使用方支持左右滑動的場景下卡片內(nèi)容不要使用左右滑動功能的組件,以防手勢沖突影響交互體驗。

除此之外,當(dāng)前ArkTS卡片還存在如下約束:

  • 暫不支持導(dǎo)入模塊。
  • 暫不支持極速預(yù)覽。
  • 暫不支持斷點調(diào)試能力。
  • 暫不支持Hot Reload熱重載。
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號