一、項(xiàng)目結(jié)構(gòu)
如圖1所示:
從項(xiàng)目結(jié)構(gòu)來(lái)看,這個(gè)應(yīng)用的內(nèi)部包含了一個(gè)子模塊叫 entry
,模塊是應(yīng)用的基本功能單元,它里面包含源代碼、資源、配置文件等。
像這樣的模塊在應(yīng)用內(nèi)部可以創(chuàng)建很多。但模塊整體來(lái)講就分成兩大類:
-
第一類就像 entry 這樣,它的內(nèi)部其實(shí)是開(kāi)發(fā)這個(gè)應(yīng)用內(nèi)的一些特殊能力的,像這樣的模塊,我們稱之為
Ability Module
,顧名思義就是能力模塊。一個(gè)應(yīng)用的內(nèi)部它的能力有很多,我們就可以把不同的能力放到不同的模塊里去開(kāi)發(fā)。舉個(gè)例子,支付寶,它的核心功能是支付,像我們熟悉的付款、轉(zhuǎn)賬等都屬于是支付類的,這部分能力我們就可以把它們放到一個(gè)模塊里。后來(lái)隨著支付寶的發(fā)展,又增加了其他的能力,比如小程序、視頻、看書等,這些能力相互之間都是獨(dú)立的,所以它們也都可以放到獨(dú)立的 Ability Module 里去開(kāi)發(fā)。這樣一來(lái)整個(gè)應(yīng)用的能力就被清晰的劃分出來(lái),管理起來(lái)也非常的方便。 -
第二類是在開(kāi)發(fā)的過(guò)程肯定有一些通用的工具、資源、配置或者組件等,這些如果每一個(gè)模塊都各自去開(kāi)發(fā)顯然是一種重復(fù)和浪費(fèi),所以我們就可以把這些通用的東西抽取起來(lái),放到一個(gè)單獨(dú)的模塊里去,這樣的模塊我們稱之為
Library Module
,顧名思義就是一種共享依賴類型的模塊。Ability 類型的 Module 就可以去引用 Library 類型的 Module。
如圖2所示:
二、項(xiàng)目編譯、打包
源碼將來(lái)肯定要去編譯、打包,最終整個(gè)項(xiàng)目會(huì)被編譯成一個(gè) APP,也就是我們熟悉的那個(gè)安裝包。只不過(guò),在 Stage 模型里面,為了降低不同功能模塊之間的耦合,事實(shí)上每一個(gè)模塊都是可以去獨(dú)立編譯和運(yùn)行的。所有的 Ability 類型的模塊,將來(lái)就會(huì)被編譯成 HAP
文件,而所有的 Library 類型的模塊,則會(huì)被編譯成 HSP
文件。所謂的 HAP
是 Harmony Ability Package
,也就是鴻蒙能力類型的包。而 HSP
則是 Harmony Shared Package
,也就是鴻蒙共享類型的包。HAP 的包在運(yùn)行的過(guò)程中就可以去引用和依賴 HSP 的包。
一個(gè)應(yīng)用內(nèi)部可能會(huì)包含多個(gè)不同的能力,就會(huì)分成很多的 Ability Module,因此往往就會(huì)有多個(gè) HAP 的文件。但是,盡管都是 HAP 類型的文件,但是它們是有差異的,比如 entry 模塊,entry 是項(xiàng)目的入口,在這個(gè)能力模塊里面,主要開(kāi)發(fā)的是項(xiàng)目入口界面等信息,還有就是整個(gè)項(xiàng)目或應(yīng)用的主能力模塊,也就是最核心的部分。剩下的一些特殊的能力模塊,比如小程序、視頻、看書等,這些能力模塊,都是拓展功能。一個(gè)應(yīng)用它的入口只能有一個(gè),所以說(shuō)如果我們的應(yīng)用內(nèi)部有很多的 HAP 文件,但是作為入口的 HAP 文件只有一個(gè),那么這個(gè) HAP 文件就叫 Entry
類型的 HAP,剩下的拓展功能就叫 Feature
類型的 HAP。所以,一個(gè)應(yīng)用內(nèi)部有且只有一個(gè) Entry
類型的 HAP,但是 Feature
類型的 HAP 可以有多個(gè)。
HAP 有很多很多文件,將來(lái)最終要合并在一起。合并在一起之后稱之為 Bundle
。這個(gè) Bundle
有一個(gè)自己的名字也就是 Bundle Name,這個(gè) Name 可以理解成整個(gè)應(yīng)用的唯一標(biāo)識(shí),將來(lái)整個(gè) Bundle 最后合并打包會(huì)變成一個(gè) APP。
如圖3所示:
之所以要采用這種多 HAP 文件打包模式,是因?yàn)椋?/p>
- 降低不同模塊之間的耦合,每個(gè) HAP 都可以去獨(dú)立編譯和運(yùn)行。
- 我們的應(yīng)用在去下載安裝時(shí),可以選擇性的安裝,不是說(shuō)一上來(lái)就把全部都安裝好了,比如我們可以先安裝它的核心模塊 Entry,其它的 Feature 可以選擇性安裝。這樣就可以降低應(yīng)用安裝時(shí)所占用的體積。
三、項(xiàng)目運(yùn)行
每一個(gè) HAP 都是可以獨(dú)立運(yùn)行的,而 HAP 在運(yùn)行的時(shí)候,為了展示我們看到的界面和它的能力,都會(huì)創(chuàng)建一個(gè)名為 AbilityStage
的實(shí)例,我們稱它為應(yīng)用組件的“舞臺(tái)”
。為啥叫舞臺(tái)呢?舞臺(tái)肯定是在上面展示東西的,顧名思義展示的就是應(yīng)用組件。
應(yīng)用能力組件又有很多類型:
-
UIAbility
:包含UI界面的應(yīng)用組件,是系統(tǒng)調(diào)度的基本單元。 -
ExtensionAbility
:拓展能力組件,例如在桌面展示的應(yīng)用卡片等。 - …
UIAbility 作為UI界面的組件,將來(lái)要展示UI界面,需要注意,它不是直接展示,首先會(huì)持有一個(gè) WindowStage
的實(shí)例對(duì)象,WindowStage 跟 AbilityStage 類似,都是一個(gè)舞臺(tái),但是 WindowStage 是組件內(nèi)窗口的舞臺(tái),也就是說(shuō)UI組件內(nèi)部先要有一個(gè)窗口(這個(gè)窗口是要展示在舞臺(tái)上),所以 WindowStage 它的上面就會(huì)持有 Window 對(duì)象,也就是窗口,窗口里面展示我們的UI界面。因此這個(gè) Window 就是用來(lái)繪制UI頁(yè)面的窗口。
如圖4所示:
綜上所述,Stage 模型采用的是舞臺(tái)的機(jī)制,先來(lái)一個(gè) AbilityStage(用來(lái)展示這些組件的舞臺(tái)),然后在舞臺(tái)上創(chuàng)建 Ability,這個(gè)組件將來(lái)要去渲染UI,它要持有一個(gè)窗口的舞臺(tái)(WindowStage),在窗口的舞臺(tái)上有一個(gè)窗口(Window),接著呢就可以在窗口里繪制頁(yè)面。所以正是因?yàn)橛泻芏嗪芏嗟奈枧_(tái),在舞臺(tái)上展示東西,這種模型就被稱之為 Stage 模型
。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-859750.html
為什么 Stage 模型要用這種舞臺(tái)機(jī)制呢?正是由于存在這種舞臺(tái)機(jī)制,Ability 和 Window 就分隔開(kāi),它們之間就解耦了,將來(lái)在開(kāi)發(fā)跨設(shè)備的應(yīng)用時(shí),就可以針對(duì)不同的設(shè)備對(duì)于窗口進(jìn)行單獨(dú)的裁剪,去適應(yīng)不同的設(shè)備。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-859750.html
到了這里,關(guān)于【HarmonyOS】Stage 模型 - 基本概念的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!