應用模型開發指南上新介紹

HarmonyOS開發者發表於2023-03-02

Module、HAP、Ability、AbilitySta-ge、Context……您是否曾經被這些搞不懂又繞不開的知識點困擾?

現在,全新的《應用程式包基礎知識》及《應用模型開發指南》為您答疑解惑!

這裡有您關注的概念解析、原理機制闡述,也有豐富的場景化開發指導,快來體驗吧~

應用程式包基礎知識:https://developer.harmonyos.c...

一、基本概念解析

新版文件中的知識點,介紹更全面,邏輯更清晰,提供了各類基本概念解析,幫助開發者更快學習、掌握系統能力。以下是新版文件部分概念展示。

1、HAP是什麼?

開發者透過DevEco Studio把應用程式編譯為一個或者多個.hap字尾的檔案,即HAP(Harmony Ability Package)。HAP是HarmonyOS應用安裝的基本單位,包含了編譯後的程式碼、資源、三方庫及配置檔案。HAP可分為Entry和Feature兩種型別。

1)Entry型別的HAP:是應用的主模組,在module.json5中的type屬性配置為entry型別。在同一個應用中,同一裝置型別只支援一個Entry型別的HAP,通常用於實現應用的入口介面、入口圖示、主特性功能等。

2)Feature型別的HAP:是應用的動態特性模組,在module.json5中的type屬性配置為feature型別。一個應用程式包可以包含一個或多個Feature型別的HAP,也可以不包含;Feature型別的HAP通常用於實現應用的特性功能,可以配置成按需下載安裝,也可以配置成隨Entry型別的HAP一起下載安裝(請參見module物件內部結構中的“deliveryWithInstall”)。

2、Module是什麼?

在DevEco Studio工程目錄中,一個HAP對應一個Module。

Module是指DevEco Studio工程中的功能單元。一個DevEco Studio工程可以包含多個Module,同時Module分為“Ability”、“Library”兩種型別。此處的HAP對應“Ability”型別的Module;下文即將介紹的HAR(Harmony Ability Resources)包對應“Library”型別的Module。

3、Bundle是什麼?

每個HarmonyOS應用可以包含多個.hap檔案,這些.hap檔案合在一起稱為一個Bundle,每個應用都有一個BundleName。在每臺裝置上,已安裝應用的BundleName是唯一的。需要特別說明的是:在應用上架到應用市場時,需要把應用包含的所有.hap檔案(即Bundle)打包為一個.app字尾的檔案用於上架,這個.app檔案稱為App Pack(Application Package),其中同時包含了描述App Pack屬性的pack.info檔案;但是,在雲端分發和端側安裝時,都是以HAP為單位進行分發和安裝的。

4、Ability元件概述

Ability元件是一種包含使用者介面的應用元件,用於與使用者互動。Ability元件是系統排程的基本單元,為應用提供繪製介面的視窗;一個Ability元件中可以透過多個頁面來實現一個模組功能。

建議將不同模組功能拆解為不同的Ability元件單獨實現,即將一個獨立的功能模組放到一個Ability元件中,以多頁面的形式呈現。每一個Ability元件例項,都對應於一個任務,可以在最近任務列表中呈現。

在開發態,一個Module可以包含一個或多個Ability元件,如下圖所示。

圖片
Module與Ability元件關係示意圖

更多文件資訊,請訪問:https://developer.harmonyos.c...

二、原理機制解讀

必要的原理、機制解讀,讓開發者“知其然,知其所以然”。

為讓大家更好的理解系統工作原理,我們使用舉例、圖文結合等方式來詳細解讀原理機制。接下來,我們以Ability元件啟動模式—specified為例進行介紹。

specified(指定例項模式),在Ability例項建立之前,允許開發者為該例項建立一個唯一的字串Key,建立的Ability例項繫結Key之後,後續每次呼叫startAbility()方法時,都會詢問應用使用哪個Key對應的Ability例項來響應startAbility請求。執行時由Ability內部業務決定是否建立多例項,如果匹配有該Ability例項的Key,則直接拉起與之繫結的Ability例項,否則建立一個新的Ability例項。

例如使用者在應用中重複開啟同一個文件時,啟動的均是最近任務列表中的同一個任務。以及在應用中重複新建文件時,啟動的均是最近任務列表中新的任務。這種情況下可以將Ability配置為specified(指定例項模式)。

圖片
指定例項模式演示效果

更多文件資訊,請訪問:https://developer.harmonyos.c...

三、場景化開發指導

本次還補充/完善了20+個開發場景指導,只為讓文件更貼近實際開發活動,助力開發者高效開發。以下為部分場景展示。

1、如何實現Ability元件與UI資料同步

本次按場景提供了具體的開發指導,主要包括:

使用EventHub進行資料通訊:EventHub提供了Ability元件/ExtensionAbility元件級別的事件機制,以Ability元件/ExtensionAbility元件為中心提供了訂閱、取消訂閱和觸發事件的資料通訊能力。

使用globalThis進行資料同步:globalThis是ArkTS引擎例項內部的一個全域性物件,引擎例項下的Ability/Page都可以使用,因此可以使用globalThis全域性物件進行資料同步。

2、跨Ability元件跳轉

詳細的場景化開發指導,主要包括:

啟動應用內的Ability:當一個應用內包含多個Ability時,存在應用內啟動Ability的場景。

啟動應用內的Ability並獲取返回結果:在一個EntryAbility啟動另外一個FuncAbility時,希望在被啟動的FuncAbility完成相關業務後,能將結果返回給呼叫方。例如在應用中將入口功能和帳號登入功能分別設計為兩個獨立的Ability,在帳號登入Ability中完成登入操作後,需要將登入的結果返回給入口Ability。

啟動其他應用的Ability:啟動其他應用的Ability,通常使用者只需要完成一個通用的操作(例如需要選擇一個文件應用來檢視某個文件的內容資訊),推薦使用隱式Want啟動。系統會根據呼叫方的want引數來識別和啟動匹配到的應用Ability。

啟動其他應用的Ability並獲取返回結果:當使用隱式Want啟動其他應用的Ability並希望獲取返回結果時,呼叫方需要使用startAbility-ForResult()方法啟動目標Ability。

啟動Ability的指定頁面:一個Ability可以對應多個頁面,在不同的場景下啟動該Ability時需要展示不同的頁面,例如從一個Ability的頁面中啟動另外一個Ability時,希望啟動該Ability的指定頁面。本文主要講解目標Ability首次啟動和目標Ability非首次啟動兩種啟動指定頁面的場景,以及在講解啟動指定頁面之前會講解到在呼叫方如何指定啟動頁面。

更多文件資訊,請訪問:https://developer.harmonyos.c...

四、我們期待您的反饋

以上就是本期文件君為大家準備的HarmonyOS應用程式包基礎知識及應用模型開發指南上新內容,希望能夠幫助開發者更高效的探索、體驗、上手HarmonyOS。

同時,我們十分重視開發者的意見,歡迎各位開發者在HarmonyOS應用開發官網積極反饋意見,幫助我們持續提升文件體驗。

我們將持續改進文件體驗、豐富和完善內容,感謝各位開發者的支援及信賴,您的滿意是我們持續提升文件體驗的目標和動力。

敬請期待HarmonyOS開發者公眾號更多相關推送,獲取最新文件和內容資源!

圖片

相關文章