作者:sunbingxin 應(yīng)用框架架構(gòu)師
HarmonyOS 3.1版本(API 9)推出了全新應(yīng)用開(kāi)發(fā)模型-Stage模型,該模型重新定義了應(yīng)用開(kāi)發(fā)的能力邊界,從應(yīng)用開(kāi)發(fā)模型的角度,支持多窗口形態(tài)下統(tǒng)一的應(yīng)用組件生命周期,并支持跨設(shè)備的遷移和協(xié)同機(jī)制。本文為大家詳細(xì)介紹Stage模型。
一
Stage模型概念
應(yīng)用開(kāi)發(fā)模型是運(yùn)行在不同OS上的抽象結(jié)構(gòu)。OS通過(guò)這種抽象結(jié)構(gòu),把應(yīng)用開(kāi)發(fā)的基礎(chǔ)設(shè)施封裝在OS內(nèi)部。開(kāi)發(fā)者通過(guò)使用應(yīng)用開(kāi)發(fā)模型,復(fù)用OS基礎(chǔ)設(shè)施的能力,達(dá)到高效開(kāi)發(fā)應(yīng)用的目的。
1、什么是Stage模型
Stage模型提供面向?qū)ο蟮拈_(kāi)發(fā)方式,規(guī)范化了進(jìn)程創(chuàng)建的方式,提供組件化開(kāi)發(fā)機(jī)制,將組件抽象為UIAbility和ExtensionAbility兩大類(lèi)。UIAbility組件的生命周期包含創(chuàng)建、銷(xiāo)毀、前臺(tái)、后臺(tái)狀態(tài),將與界面強(qiáng)相關(guān)的獲焦、失焦?fàn)顟B(tài)都放在窗口管理對(duì)象中,從而實(shí)現(xiàn)UIAbility與窗口之間的弱耦合;在服務(wù)側(cè),窗口管理服務(wù)依賴于組件管理服務(wù),前者通知后者前后臺(tái)變化,這樣組件管理服務(wù)僅感知前后臺(tái)變化,不感知焦點(diǎn)變化。ExtensionAbility組件提供場(chǎng)景化的服務(wù)擴(kuò)展機(jī)制,不提供自定義服務(wù)的能力。
相比于FA模型,Stage模型提供了更靈活的開(kāi)發(fā)方式,更低的內(nèi)存占用和更規(guī)范化的系統(tǒng)管理機(jī)制。
未來(lái)HarmonyOS將在兼容FA模型的基礎(chǔ)上,持續(xù)演進(jìn)Stage模型。

FA模型與Stage模型對(duì)比圖
2、Stage模型能力特點(diǎn)

Stage模型能力示意圖
Stage模型的設(shè)計(jì),是為了提供給開(kāi)發(fā)者一個(gè)更好的開(kāi)發(fā)方式,更好的適用于多設(shè)備、分布式場(chǎng)景。
Stage模型的三大能力特點(diǎn):
1)原生支持組件級(jí)的遷移和協(xié)同
Stage模型的組件天生具備分布式遷移和協(xié)同的能力,它是HarmonyOS支持分布式能力在應(yīng)用模型上的體現(xiàn)。
應(yīng)用組件支持跨設(shè)備的數(shù)據(jù)恢復(fù):
充分使用ArkUI的聲明式UI和多頁(yè)面的能力,把數(shù)據(jù)/狀態(tài)保存在UIAbility組件實(shí)例中,邏輯修改數(shù)據(jù),數(shù)據(jù)驅(qū)動(dòng)UI變化。多設(shè)備間遷移UIAbility,就是遷移UIAbility的數(shù)據(jù)/狀態(tài)。在目標(biāo)設(shè)備上通過(guò)數(shù)據(jù)/狀態(tài)來(lái)恢復(fù)UI,實(shí)現(xiàn)邏輯與UI的解耦,提升了流轉(zhuǎn)開(kāi)發(fā)效率。
應(yīng)用組件支持跨設(shè)備的遠(yuǎn)程調(diào)用:
UIAbility組件支持跨設(shè)備拉起另外一個(gè)設(shè)備上同名應(yīng)用的同名組件實(shí)例。系統(tǒng)在拉起過(guò)程中,通過(guò)底層軟總線的能力在兩個(gè)組件實(shí)例之間建立跨設(shè)備的RPC連接,開(kāi)發(fā)者在獲取RPC接口后,即可進(jìn)行跨設(shè)備通信,適用于應(yīng)用在設(shè)備間交互的場(chǎng)景。
2)支持多設(shè)備形態(tài)和多窗口形態(tài)
在桌面設(shè)備上,窗口可以最大化/最小化/任意改變窗口大小,窗口間可以任意切換焦點(diǎn),接收用戶輸入。在移動(dòng)設(shè)備上,基本以全屏窗口為主,窗口之間構(gòu)成棧結(jié)構(gòu),只有頂層窗口才能接收用戶輸入。如何在不同窗口形態(tài)的設(shè)備上,提供統(tǒng)一的組件模型呢?Stage模型分離了UIAbility生命周期和窗口顯示/焦點(diǎn)事件,使得窗口的焦點(diǎn)切換不影響UIAbility組件的狀態(tài)。
UIAbility的前后臺(tái)狀態(tài)和窗口的全屏/最小化的關(guān)系如下:
只有當(dāng)窗口最小化的時(shí)候,UIAbility組件進(jìn)入后臺(tái)狀態(tài),否則UIAbility組件處于前臺(tái)狀態(tài);
當(dāng)一個(gè)窗口全屏的時(shí)候,觸發(fā)其他窗口最小化(可以根據(jù)產(chǎn)品形態(tài)確定全屏窗口個(gè)數(shù))。
在桌面設(shè)備和移動(dòng)設(shè)備的交互體驗(yàn)不同的情況下,系統(tǒng)通過(guò)實(shí)施上述規(guī)則,可以保證UIAbility組件的生命周期定義在多設(shè)備上保持一致。同時(shí),不論在桌面設(shè)備還是移動(dòng)設(shè)備,都遵循每個(gè)新的UIAbility組件實(shí)例都會(huì)創(chuàng)建一個(gè)任務(wù),所以也保證了任務(wù)(Mission)機(jī)制在多設(shè)備上的一致性。
3)重新定義應(yīng)用能力邊界
通常情況下,應(yīng)用如果可自行決定創(chuàng)建多少個(gè)進(jìn)程、自定義服務(wù)時(shí),系統(tǒng)為保證用戶體驗(yàn),需要在后臺(tái)運(yùn)行管控、進(jìn)程關(guān)聯(lián)啟動(dòng)等方面對(duì)應(yīng)用的運(yùn)行狀態(tài)進(jìn)行強(qiáng)管理,從而降低系統(tǒng)總體的內(nèi)存占用和功耗開(kāi)銷(xiāo)。
Stage模型基于場(chǎng)景的服務(wù)擴(kuò)展、嚴(yán)格的后臺(tái)管控機(jī)制和受限的進(jìn)程模型,重新定義了應(yīng)用能力邊界,使進(jìn)程環(huán)境從“無(wú)序”到“有序”,規(guī)范了進(jìn)程管理模型。
二
Stage模型介紹
基于Stage模型開(kāi)發(fā)應(yīng)用,下面將會(huì)從應(yīng)用組件、進(jìn)程模型、線程模型、任務(wù)模型、后臺(tái)運(yùn)行機(jī)制、應(yīng)用配置文件6個(gè)方面進(jìn)行介紹。
1、組件模型
應(yīng)用開(kāi)發(fā)模型中需要指明應(yīng)用開(kāi)發(fā)的入口。在HarmonyOS上,應(yīng)用組件是應(yīng)用開(kāi)發(fā)的入口,同時(shí)也是運(yùn)行時(shí)入口。用戶啟動(dòng)、使用和退出應(yīng)用過(guò)程中,應(yīng)用組件會(huì)在不同的狀態(tài)間切換,這些狀態(tài)稱為應(yīng)用組件的生命周期。應(yīng)用組件提供生命周期的回調(diào)函數(shù),開(kāi)發(fā)者通過(guò)應(yīng)用組件的生命周期回調(diào)感知應(yīng)用的狀態(tài)變化。

Stage模型組件類(lèi)型
Stage模型提供了UIAbility和ExtensionAbility兩種類(lèi)型的組件。
1) UIAbility組件是一種包含UI界面的應(yīng)用組件,主要用于和用戶交互。UIAbility的生命周期只包含創(chuàng)建/銷(xiāo)毀/前臺(tái)/后臺(tái)等狀態(tài),通過(guò)WindowStage的事件暴露顯示相關(guān)的狀態(tài)。每個(gè)UIAbility組件都會(huì)有一個(gè)主窗口與之綁定,如果開(kāi)發(fā)者希望開(kāi)發(fā)復(fù)雜的頁(yè)面和動(dòng)效,我們推薦開(kāi)發(fā)者使用ArkUI的多頁(yè)面能力。UIAbility支持跨設(shè)備拉起同名組件,并與之協(xié)同交互的能力。
2)ExtensionAbility組件是一種面向特定場(chǎng)景的應(yīng)用組件,系統(tǒng)在特定場(chǎng)景下啟動(dòng)該組件為用戶提供服務(wù)。開(kāi)發(fā)者并不直接從ExtensionAbility派生,而是從ExtensionAbility的派生類(lèi)派生。目前ExtensionAbility有用于卡片場(chǎng)景的FormExtensionAbility和用于輸入法場(chǎng)景的InputMethodExtensionAbility等多種派生類(lèi)。在Stage模型上,普通應(yīng)用開(kāi)發(fā)者不能開(kāi)發(fā)自定義服務(wù),也不支持開(kāi)發(fā)者直接啟動(dòng)ExtensionAbility,包括開(kāi)發(fā)者自己編寫(xiě)的ExtensionAbility。
2、進(jìn)程模型

進(jìn)程模型示意圖
Stage模型有三類(lèi)進(jìn)程,是從系統(tǒng)總體資源占用考慮,希望由系統(tǒng)負(fù)責(zé)應(yīng)用進(jìn)程的創(chuàng)建和銷(xiāo)毀。所以不支持應(yīng)用自定義配置多進(jìn)程,也不支持通過(guò)接口啟動(dòng)進(jìn)程。
1)主進(jìn)程
開(kāi)發(fā)者編寫(xiě)的UIAbility入口及其依賴的代碼都在該進(jìn)程中運(yùn)行。它是由UIAbility組件的啟動(dòng)觸發(fā)創(chuàng)建的。
2)ExtensionAbility進(jìn)程
開(kāi)發(fā)者編寫(xiě)的同一種類(lèi)型的ExtensionAbility組件實(shí)例都會(huì)在同一個(gè)進(jìn)程中運(yùn)行。不同類(lèi)型的ExtensionAbility組件實(shí)例則在不同的進(jìn)程中運(yùn)行。該類(lèi)進(jìn)程是由系統(tǒng)服務(wù)在特定場(chǎng)景下創(chuàng)建,并根據(jù)用戶對(duì)特定場(chǎng)景的使用,決定其何時(shí)銷(xiāo)毀。同時(shí)該類(lèi)進(jìn)程獨(dú)立于主進(jìn)程創(chuàng)建,并且不支持與主進(jìn)程之間進(jìn)行IPC通信。
3)Render進(jìn)程
為了支持WebView的運(yùn)行,每個(gè)應(yīng)用只能創(chuàng)建一個(gè)Render進(jìn)程用于運(yùn)行WebView的渲染引擎。這個(gè)Render進(jìn)程也是由系統(tǒng)負(fù)責(zé)創(chuàng)建和銷(xiāo)毀。
3、線程模型
HarmonyOS的原生應(yīng)用開(kāi)發(fā)語(yǔ)言為ArkTS。在應(yīng)用進(jìn)程啟動(dòng)時(shí),系統(tǒng)會(huì)在主線程上創(chuàng)建一個(gè)ArkTS的虛擬機(jī)實(shí)例,然后加載和執(zhí)行應(yīng)用的入口代碼。應(yīng)用組件的生命周期回調(diào),輸入事件的分發(fā),ArkUI的布局等操作都會(huì)在主線程上執(zhí)行,所以我們推薦開(kāi)發(fā)者不要在主線程上執(zhí)行單次耗時(shí)過(guò)長(zhǎng)的操作,否則容易引發(fā)卡頓。
ArkTS通過(guò)提供Worker API支持并發(fā)編程。Worker有獨(dú)立的虛擬機(jī)上下文,它與主線程是兩個(gè)不同的虛擬機(jī)上下文。它們之間通過(guò)postMessage API進(jìn)行通信。這種基于消息傳遞的并發(fā)模型與基于鎖的并發(fā)模型不同,需要開(kāi)發(fā)者特別注意。
4、任務(wù)模型
用戶在操作應(yīng)用的過(guò)程中,經(jīng)常需要對(duì)已經(jīng)操作過(guò)的應(yīng)用進(jìn)行切換,這些操作記錄(不同OS的操作對(duì)象定義可能不同)經(jīng)常被稱為任務(wù)。應(yīng)用任務(wù)管理模型需要定義任務(wù)的操作對(duì)象,以及任務(wù)創(chuàng)建和銷(xiāo)毀的方式和時(shí)機(jī)。
在HarmonyOS上,每次用戶啟動(dòng)一個(gè)新的UIAbility組件實(shí)例,都會(huì)生成一個(gè)新的任務(wù)(Mission)。例如,用戶啟動(dòng)一個(gè)視頻應(yīng)用后,切換到“任務(wù)中心”界面,將會(huì)看到視頻應(yīng)用這個(gè)任務(wù),當(dāng)用戶點(diǎn)擊這個(gè)任務(wù)時(shí),系統(tǒng)會(huì)把該任務(wù)切換到前臺(tái),如果這個(gè)視頻應(yīng)用中的視頻編輯功能也是通過(guò)應(yīng)用組件編寫(xiě)的,那么在用戶啟動(dòng)視頻編輯功能時(shí),會(huì)創(chuàng)建視頻編輯的應(yīng)用組件實(shí)例,在“任務(wù)中心”界面中,將會(huì)展示視頻應(yīng)用、視頻編輯兩個(gè)任務(wù)。
任務(wù)(Mission)中記錄了組件和快照的信息,并在系統(tǒng)中持久化。即使任務(wù)對(duì)應(yīng)的組件實(shí)例銷(xiāo)毀,任務(wù)仍然存在。如果用戶從任務(wù)中心中選擇某個(gè)任務(wù),任務(wù)對(duì)應(yīng)的組件實(shí)例會(huì)被拉到前臺(tái)并獲焦,如果它對(duì)應(yīng)的組件實(shí)例已經(jīng)銷(xiāo)毀,系統(tǒng)會(huì)創(chuàng)建一個(gè)新的組件實(shí)例與之對(duì)應(yīng)。
開(kāi)發(fā)者在用戶交互設(shè)計(jì)上需要特別注意,避免產(chǎn)生過(guò)多的任務(wù)。如果開(kāi)發(fā)者希望使用多個(gè)頁(yè)面交互,推薦使用ArkUI的頁(yè)面棧能力。
HarmonyOS的任務(wù)模型不提供任務(wù)棧的能力,每個(gè)應(yīng)用可以有多個(gè)任務(wù)在任務(wù)中心呈現(xiàn),不同應(yīng)用的任務(wù)不會(huì)以棧的形式堆疊在一起,避免了不同應(yīng)用間任務(wù)混淆不清的情況。
5、后臺(tái)運(yùn)行機(jī)制

后臺(tái)運(yùn)行示意圖
當(dāng)應(yīng)用的所有前臺(tái)UIAbility組件都進(jìn)入后臺(tái)的時(shí)候,系統(tǒng)認(rèn)為該應(yīng)用進(jìn)入后臺(tái)。應(yīng)用在后臺(tái)運(yùn)行的機(jī)制對(duì)設(shè)備續(xù)航影響很大。HarmonyOS后臺(tái)運(yùn)行機(jī)制的設(shè)計(jì)初衷是希望應(yīng)用進(jìn)程在系統(tǒng)規(guī)則范圍內(nèi)運(yùn)行,并使用戶可感知,避免應(yīng)用進(jìn)程在后臺(tái)運(yùn)行,而用戶不感知的情況。我們提供了如下幾種后臺(tái)任務(wù)(Task):
1)短時(shí)任務(wù)
系統(tǒng)每天會(huì)給申請(qǐng)了短時(shí)任務(wù)的應(yīng)用分配一定的后臺(tái)運(yùn)行配額。
2)長(zhǎng)時(shí)任務(wù)
系統(tǒng)定義了若干種后臺(tái)長(zhǎng)時(shí)運(yùn)行的任務(wù)類(lèi)型,開(kāi)發(fā)者需要在應(yīng)用的配置文件中配置,并需要上架審核。這樣該應(yīng)用在設(shè)備上后臺(tái)運(yùn)行的時(shí)候,就可以保持長(zhǎng)時(shí)間運(yùn)行,同時(shí)系統(tǒng)會(huì)通過(guò)用戶可感知的UI提示用戶有后臺(tái)進(jìn)程正在運(yùn)行。例如導(dǎo)航,錄音,音樂(lè)等場(chǎng)景。
3)無(wú)任務(wù)
默認(rèn)情況下,應(yīng)用不申請(qǐng)任何后臺(tái)運(yùn)行方式,則會(huì)在應(yīng)用進(jìn)程進(jìn)入后臺(tái)10秒鐘后被凍結(jié)掛起,應(yīng)用無(wú)法收到外部非用戶操作事件。
4)閑時(shí)任務(wù)
對(duì)于一些CPU密集型,且對(duì)實(shí)時(shí)性要求不高的任務(wù),比如科學(xué)計(jì)算等場(chǎng)景,系統(tǒng)提供了閑時(shí)任務(wù)機(jī)制。例如設(shè)備充電等適當(dāng)?shù)臅r(shí)機(jī)向應(yīng)用提供后臺(tái)運(yùn)行的能力,開(kāi)發(fā)者可以通過(guò)Work-SchedulerExtensionAbility使用該機(jī)制,系統(tǒng)會(huì)根據(jù)當(dāng)前的系統(tǒng)狀態(tài)和用戶使用頻次決策喚醒時(shí)機(jī)。
5)托管任務(wù)
對(duì)于一些可以托管給系統(tǒng)執(zhí)行的任務(wù)。比如下載等場(chǎng)景,系統(tǒng)提供代理任務(wù)的API,由系統(tǒng)代理實(shí)現(xiàn)任務(wù),應(yīng)用進(jìn)程會(huì)處于凍結(jié)狀態(tài)。
6、應(yīng)用配置文件
Stage模型提供了全新的應(yīng)用配置文件,它包含應(yīng)用信息、應(yīng)用組件信息、權(quán)限信息、開(kāi)發(fā)者自定義信息等,這些信息在編譯構(gòu)建、分發(fā)和運(yùn)行階段分別提供給編譯工具、應(yīng)用市場(chǎng)和操作系統(tǒng)使用。
Stage應(yīng)用模型是HarmonyOS應(yīng)用開(kāi)發(fā)的基礎(chǔ)架構(gòu),它從組件模型、面向?qū)ο箝_(kāi)發(fā)方式、進(jìn)程/線程模型等方面對(duì)FA模型進(jìn)行了全面的優(yōu)化,提高了應(yīng)用開(kāi)發(fā)效率。后續(xù)我們將在應(yīng)用模型的基礎(chǔ)設(shè)施、大型應(yīng)用開(kāi)發(fā)、拓展應(yīng)用形態(tài)、跨設(shè)備能力和性能體驗(yàn)等方面繼續(xù)打磨,支撐HarmonyOS應(yīng)用生態(tài)拓展,廣大開(kāi)發(fā)者加入進(jìn)來(lái),一起探索和創(chuàng)新,共建萬(wàn)物互聯(lián)的應(yīng)用生態(tài)。
未來(lái)將來(lái),有跡可循!
END
想了解更多HarmonyOS技術(shù)?
后臺(tái)留言給我們
立刻安排!

歡迎點(diǎn)擊|閱讀原文|
進(jìn)入HarmonyOS應(yīng)用開(kāi)發(fā)在線體驗(yàn)
原文標(biāo)題:Stage模型深入解讀
文章出處:【微信公眾號(hào):HarmonyOS開(kāi)發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
HarmonyOS
+關(guān)注
關(guān)注
80文章
2126瀏覽量
33019
原文標(biāo)題:Stage模型深入解讀
文章出處:【微信號(hào):HarmonyOS_Dev,微信公眾號(hào):HarmonyOS開(kāi)發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
鴻蒙中Stage模型與FA模型詳解
FA模型的DataAbility的切換介紹
FA模型卡片和Stage模型卡片切換
從FA模型切換到Stage模型時(shí):module的切換說(shuō)明
FA模型的ServiceAbility的切換介紹
FA模型綁定Stage模型ServiceExtensionAbility介紹
FA模型訪問(wèn)Stage模型DataShareExtensionAbility說(shuō)明
Stage模型綁定FA模型ServiceAbility的方法
Stage模型啟動(dòng)FA模型PageAbility方法
如何將一個(gè)FA模型開(kāi)發(fā)的聲明式范式應(yīng)用切換到Stage模型
KaihongOS操作系統(tǒng)FA模型與Stage模型介紹
深入解讀智多晶FIR IP

ASSEMBLY發(fā)布STAGE AI
基于Java的工具Power Stage Designer

評(píng)論