前言
UIAbility組件是一種包含UI界面的應用組件,主要用于和用戶交互。
UIAbility組件是系統(tǒng)調(diào)度的基本單元,為應用提供繪制界面的窗口;一個UIAbility組件中可以通過多個頁面來實現(xiàn)一個功能模塊。每一個UIAbility組件實例,都對應于一個最近任務列表中的任務。文章來源:http://www.zghlxwxcb.cn/news/detail-755517.html
一、UIAbility概況
1.1 概況介紹
UIAbility組件是一種包含UI界面的應用組件,主要用于和用戶交互。
UIAbility組件是系統(tǒng)調(diào)度的基本單元,為應用提供繪制界面的窗口;一個UIAbility組件中可以通過多個頁面來實現(xiàn)一個功能模塊。每一個UIAbility組件實例,都對應于一個最近任務列表中的任務。
我們可以通過上述的抽象概念下出下面通俗易懂的解釋:
UIAbility組件就像是你手機上的一個應用,它負責展示應用的用戶界面,你可以通過它來和應用進行互動。每個UIAbility組件可以包含多個不同的界面,就像應用中的不同頁面。每次你在手機上打開一個應用,實際上是啟動了一個UIAbility組件的實例,這個應用會在最近任務列表中顯示。這個機制讓你能夠輕松切換和管理不同應用和它們的界面。
1.2 聲明配置
為使應用能夠正常使用UIAbility,需要在module.json5配置文件的abilities標簽中聲明UIAbility的名稱、入口、標簽等相關信息。
以下是我們可以進行設置的參數(shù):
{
"module": {
// ...
"abilities": [
{
"name": "EntryAbility", // UIAbility組件的名稱
"srcEntrance": "./ets/entryability/EntryAbility.ts", // UIAbility組件的代碼路徑
"description": "$string:EntryAbility_desc", // UIAbility組件的描述信息
"icon": "$media:icon", // UIAbility組件的圖標
"label": "$string:EntryAbility_label", // UIAbility組件的標簽
"startWindowIcon": "$media:icon", // UIAbility組件啟動頁面圖標資源文件的索引
"startWindowBackground": "$color:start_window_background", // UIAbility組件啟動頁面背景顏色資源文件的索引
// ...
}
]
}
}
二、UIAbility組件生命周期
2.1 基本概念
由于文檔可能有點抽象,我將用我的解釋來代替文檔中的解釋:
UIAbility就像是應用中的一個窗口或界面,它有自己的生命周期,就像一個角色有不同的狀態(tài)。這個生命周期包括四個狀態(tài):
Create(創(chuàng)建):當用戶打開應用或者切換到應用時,UIAbility被創(chuàng)建。就好像你打開一個應用,應用的界面被呈現(xiàn)在屏幕上。
Foreground(前臺):當應用界面處于活躍狀態(tài)時,它處于前臺狀態(tài)。這就像你正在使用一個應用,它是當前的焦點。
Background(后臺):如果你切換到了其他應用,原來的應用就進入了后臺狀態(tài)。UIAbility也會相應地從前臺變成后臺狀態(tài)。
Destroy(銷毀):當你關閉應用或者應用被系統(tǒng)銷毀時,UIAbility也會被銷毀。就像你關閉一個應用,它的界面消失了。
這些狀態(tài)變化可以幫助應用了解UIAbility在不同時刻的狀態(tài),從而執(zhí)行不同的操作或者保持應用的一致性。
他可以用這個流程圖表示。
2.2 生命周期狀態(tài)說明
Create狀態(tài)
Create狀態(tài)
Create狀態(tài)為在應用加載過程中,UIAbility實例創(chuàng)建完成時觸發(fā),系統(tǒng)會調(diào)用onCreate()回調(diào)??梢栽谠摶卣{(diào)中進行應用初始化操作,例如變量定義資源加載等,用于后續(xù)的UI界面展示。
我們?nèi)绾稳フ业剿?br> 如圖所示,打開EntryAbility.ts的typescript文件
這個即使創(chuàng)建函數(shù),我們可以使用ts的console.log打印一些提示信息:
onCreate(want, launchParam) {
console.log("i am create!")
}
WindowStageCreate和WindowStageDestroy狀態(tài)
我覺得文檔對于初學者比較抽象一點,我們可以寫成下方的更好理解的話術:
當你的應用程序啟動時,系統(tǒng)會為每個UIAbility實例創(chuàng)建一個WindowStage(窗口舞臺)。這個WindowStage就像是應用界面的舞臺,上面可以加載各種UI元素。
在WindowStage創(chuàng)建完成后,系統(tǒng)會調(diào)用onWindowStageCreate()這個回調(diào)函數(shù)。在這個函數(shù)里,你可以設置你的UI界面,比如加載各種頁面,設置UI元素的樣式等。你還可以訂閱WindowStage的事件,比如獲得焦點(用戶正在與應用交互)或失去焦點(應用不再是用戶的焦點)、可見或不可見等。這些事件讓你的應用能夠響應用戶的操作。
在onWindowStageCreate()回調(diào)函數(shù)中,通常會使用loadContent()方法來加載應用要顯示的頁面。同時,你也可以根據(jù)需要訂閱各種WindowStage事件,以便在用戶操作發(fā)生時做出相應的響應。
當用戶退出應用或者應用被系統(tǒng)銷毀時,對應的UIAbility實例會被銷毀。在這之前,系統(tǒng)會先調(diào)用onWindowStageDestroy()回調(diào)函數(shù)。在這個函數(shù)里,你可以釋放UI界面所占用的資源,做一些清理工作。比如,你可以在這里注銷之前訂閱的獲得焦點或失去焦點等WindowStage事件,以確保資源被正確釋放,應用退出時不會出現(xiàn)問題。
這樣,通過在WindowStage的創(chuàng)建和銷毀過程中設置相應的回調(diào)函數(shù),你的應用就能夠在不同的階段執(zhí)行不同的操作,從而保證用戶體驗的一致性和應用的穩(wěn)定性。
我們還可以通過字和流程圖一起來體會。
Foreground和Background狀態(tài)
Foreground和Background狀態(tài)分別在UIAbility實例切換至前臺和切換至后臺時觸發(fā),對應于onForeground()回調(diào)和onBackground()回調(diào)。
onForeground()回調(diào),在UIAbility的UI界面可見之前,如UIAbility切換至前臺時觸發(fā)??梢栽趏nForeground()回調(diào)中申請系統(tǒng)需要的資源,或者重新申請在onBackground()中釋放的資源。
onBackground()回調(diào),在UIAbility的UI界面完全不可見之后,如UIAbility切換至后臺時候觸發(fā)??梢栽趏nBackground()回調(diào)中釋放UI界面不可見時無用的資源,或者在此回調(diào)中執(zhí)行較為耗時的操作,例如狀態(tài)保存等。
例如應用在使用過程中需要使用用戶定位時,假設應用已獲得用戶的定位權限授權。在UI界面顯示之前,可以在onForeground()回調(diào)中開啟定位功能,從而獲取到當前的位置信息。
當應用切換到后臺狀態(tài),可以在onBackground()回調(diào)中停止定位功能,以節(jié)省系統(tǒng)的資源消耗。
上述即是這兩個函數(shù):
我們在這邊如果想體驗這兩個函數(shù),我們需要使用本地虛擬機/真機,注意:預覽模式是查看不了這兩個函數(shù)執(zhí)行的
Destroy狀態(tài)
Destroy狀態(tài)在UIAbility實例銷毀時觸發(fā)??梢栽趏nDestroy()回調(diào)中進行系統(tǒng)資源的釋放、數(shù)據(jù)的保存等操作。
例如調(diào)用terminateSelf()方法停止當前UIAbility實例,從而完成UIAbility實例的銷毀;或者用戶使用最近任務列表關閉該UIAbility實例,完成UIAbility的銷毀。
三、UIAbility的啟動模式
UIAbility的啟動模式是指UIAbility實例在啟動時的不同呈現(xiàn)狀態(tài)。針對不同的業(yè)務場景,系統(tǒng)提供了三種啟動模式:
singleton(單實例模式)
standard(標準實例模式)
specified(指定實例模式)
3.1 singleton啟動模式
由于文檔中比較抽象,我們可以使用下面的語言來代替:
"Singleton啟動模式"是一種應用程序的啟動方式,通常是默認的啟動方式。在這個模式下,每當你使用startAbility()方法來啟動一個UIAbility(用戶界面能力)時,如果已經(jīng)存在相同類型的UIAbility實例,系統(tǒng)會復用現(xiàn)有的實例,而不會創(chuàng)建新的。這意味著在最近任務列表中,只會存在一個該類型的UIAbility實例。
以通俗的方式來說,就好像你有一個應用,當你多次打開同一功能頁面時,不會為每次打開都創(chuàng)建新的頁面,而是會重新使用已經(jīng)存在的頁面。這樣可以節(jié)省系統(tǒng)資源,提高應用的運行效率,而且在最近任務列表中只會看到一個相同類型的頁面。這個模式通常用于確保應用不會出現(xiàn)大量相同的界面實例,以提供更好的用戶體驗和系統(tǒng)性能。
說明
應用的UIAbility實例已創(chuàng)建,該UIAbility配置為單實例模式,再次調(diào)用startAbility()方法啟動該UIAbility實例,此時只會進入該UIAbility的onNewWant()回調(diào),不會進入其onCreate()和onWindowStageCreate()生命周期回調(diào)。
進行配置singleton模式
如果需要使用singleton啟動模式,在module.json5配置文件中的"launchType"字段配置為"singleton"即可。
3.2 standard啟動模式
standard啟動模式為標準實例模式,每次調(diào)用startAbility()方法時,都會在應用進程中創(chuàng)建一個新的該類型UIAbility實例。即在最近任務列表中可以看到有多個該類型的UIAbility實例。這種情況下可以將UIAbility配置為standard(標準實例模式)。
standard模式設置
standard啟動模式的開發(fā)使用,在module.json5配置文件中的"launchType"字段配置為"standard"即可。
3.3 specified啟動模式
"Specified啟動模式"是一種特殊的啟動模式,通常用于特定場景,比如文檔編輯應用。它允許開發(fā)者在創(chuàng)建UIAbility實例之前為該實例指定一個唯一的標識字符串(稱為Key)。當UIAbility實例與這個Key綁定之后,在后續(xù)調(diào)用startAbility()方法時,系統(tǒng)會詢問應用要打開哪個與特定Key綁定的UIAbility實例。
這種方式可以理解為每個UIAbility實例都有一個特定的身份標識(Key)。每次開發(fā)者啟動UIAbility時,系統(tǒng)會根據(jù)這個Key來判斷是復用已存在的特定Key綁定的UIAbility實例,還是創(chuàng)建一個新的實例。例如,在文檔編輯應用中,如果你想新建一個文檔,可以使用一個新的Key,這將創(chuàng)建一個新的UIAbility實例;但如果你想打開一個已保存的文檔,可以使用該文檔對應的Key,這將打開與之綁定的已存在的UIAbility實例。
所以,這種模式允許應用在運行時根據(jù)特定的Key來決定是否創(chuàng)建新實例或復用已有實例,以便滿足不同的業(yè)務需求,比如確保每個文檔有自己獨立的編輯界面或者確保打開相同文檔時共享同一個界面。
說明
應用的UIAbility實例已創(chuàng)建,該UIAbility配置為指定實例模式,再次調(diào)用startAbility()方法啟動該UIAbility實例,且AbilityStage的onAcceptWant()回調(diào)匹配到一個已創(chuàng)建的UIAbility實例。此時,再次啟動該UIAbility時,只會進入該UIAbility的onNewWant()回調(diào),不會進入其onCreate()和onWindowStageCreate()生命周期回調(diào)。
總結
UIAbility組件是一種包含UI界面的應用組件,主要用于和用戶交互。
UIAbility組件是系統(tǒng)調(diào)度的基本單元,為應用提供繪制界面的窗口;一個UIAbility組件中可以通過多個頁面來實現(xiàn)一個功能模塊。每一個UIAbility組件實例,都對應于一個最近任務列表中的任務。
學習這些對于我們來說非常重要:UIAbility組件概況、生命周期與啟動模式文章來源地址http://www.zghlxwxcb.cn/news/detail-755517.html
到了這里,關于【鴻蒙軟件開發(fā)】UIAbility組件概況、生命周期與啟動模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!