W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
當用戶打開、切換和返回到對應(yīng)應(yīng)用時,應(yīng)用中的UIAbility實例會在其生命周期的不同狀態(tài)之間轉(zhuǎn)換。UIAbility類提供了一系列回調(diào),通過這些回調(diào)可以知道當前UIAbility實例的某個狀態(tài)發(fā)生改變,會經(jīng)過UIAbility實例的創(chuàng)建和銷毀,或者UIAbility實例發(fā)生了前后臺的狀態(tài)切換。
UIAbility的生命周期包括Create、Foreground、Background、Destroy四個狀態(tài),如下圖所示。
圖1 UIAbility生命周期狀態(tài)
Create狀態(tài)為在應(yīng)用加載過程中,UIAbility實例創(chuàng)建完成時觸發(fā),系統(tǒng)會調(diào)用onCreate()回調(diào)。可以在該回調(diào)中進行應(yīng)用初始化操作,例如變量定義資源加載等,用于后續(xù)的UI界面展示。
- import UIAbility from '@ohos.app.ability.UIAbility';
- import Window from '@ohos.window';
- export default class EntryAbility extends UIAbility {
- onCreate(want, launchParam) {
- // 應(yīng)用初始化
- }
- // ...
- }
UIAbility實例創(chuàng)建完成之后,在進入Foreground之前,系統(tǒng)會創(chuàng)建一個WindowStage。WindowStage創(chuàng)建完成后會進入onWindowStageCreate()回調(diào),可以在該回調(diào)中設(shè)置UI界面加載、設(shè)置WindowStage的事件訂閱。
圖2 WindowStageCreate和WindowStageDestroy狀態(tài)
在onWindowStageCreate()回調(diào)中通過loadContent()方法設(shè)置應(yīng)用要加載的頁面并根據(jù)需要訂閱WindowStage的事件(獲焦/失焦、可見/不可見)。
- import UIAbility from '@ohos.app.ability.UIAbility';
- import Window from '@ohos.window';
- export default class EntryAbility extends UIAbility {
- onWindowStageCreate(windowStage: Window.WindowStage) {
- // 設(shè)置WindowStage的事件訂閱(獲焦/失焦、可見/不可見)
- // 設(shè)置UI界面加載
- windowStage.loadContent('pages/Index', (err, data) => {
- // ...
- });
- }
- }
WindowStage的相關(guān)使用請參見窗口開發(fā)指導(dǎo)。
對應(yīng)于onWindowStageCreate()回調(diào)。在UIAbility實例銷毀之前,則會先進入onWindowStageDestroy()回調(diào),可以在該回調(diào)中釋放UI界面資源。例如在onWindowStageDestroy()中注銷獲焦/失焦等WindowStage事件。
- import UIAbility from '@ohos.app.ability.UIAbility';
- import Window from '@ohos.window';
- export default class EntryAbility extends UIAbility {
- // ...
- onWindowStageDestroy() {
- // 釋放UI界面資源
- }
- }
Foreground和Background狀態(tài)分別在UIAbility實例切換至前臺和切換至后臺時觸發(fā),對應(yīng)于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ā)。可以在onBackground()回調(diào)中釋放UI界面不可見時無用的資源,或者在此回調(diào)中執(zhí)行較為耗時的操作,例如狀態(tài)保存等。
例如應(yīng)用在使用過程中需要使用用戶定位時,假設(shè)應(yīng)用已獲得用戶的定位權(quán)限授權(quán)。在UI界面顯示之前,可以在onForeground()回調(diào)中開啟定位功能,從而獲取到當前的位置信息。
當應(yīng)用切換到后臺狀態(tài),可以在onBackground()回調(diào)中停止定位功能,以節(jié)省系統(tǒng)的資源消耗。
- import UIAbility from '@ohos.app.ability.UIAbility';
- export default class EntryAbility extends UIAbility {
- onForeground() {
- // 申請系統(tǒng)需要的資源,或者重新申請在onBackground中釋放的資源
- }
- onBackground() {
- // 釋放UI界面不可見時無用的資源,或者在此回調(diào)中執(zhí)行較為耗時的操作
- // 例如狀態(tài)保存等
- }
- }
Destroy狀態(tài)在UIAbility實例銷毀時觸發(fā)。可以在onDestroy()回調(diào)中進行系統(tǒng)資源的釋放、數(shù)據(jù)的保存等操作。
例如調(diào)用terminateSelf()方法停止當前UIAbility實例,從而完成UIAbility實例的銷毀;或者用戶使用最近任務(wù)列表關(guān)閉該UIAbility實例,完成UIAbility的銷毀。
- import UIAbility from '@ohos.app.ability.UIAbility';
- import Window from '@ohos.window';
- export default class EntryAbility extends UIAbility {
- onDestroy() {
- // 系統(tǒng)資源的釋放、數(shù)據(jù)的保存等
- }
- }
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: