在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

深入理解HarmonyOS UIAbility:生命周期、WindowStage與啟動模式探析

王程 ? 來源:jf_75796907 ? 作者:jf_75796907 ? 2024-02-17 15:33 ? 次閱讀

UIAbility組件概述

UIAbility組件是HarmonyOS中一種包含UI界面的應用組件,主要用于與用戶進行交互。每個UIAbility組件實例對應最近任務列表中的一個任務,可以包含多個頁面來實現不同功能模塊。

聲明配置

為了使用UIAbility,首先需要在module.json5配置文件的abilities標簽中聲明UIAbility的相關信息,包括名稱、入口、描述、圖標等。

{
  "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組件生命周期

UIAbility組件的生命周期包括四個狀態:Create、Foreground、Background、Destroy。在不同狀態之間轉換時,系統會調用相應的生命周期回調函數。

Create狀態

Create狀態表示UIAbility實例創建完成時觸發,系統調用onCreate()回調。在該回調中可以進行應用初始化操作,如變量定義、資源加載等,為后續的UI界面展示做準備。

import UIAbility from '@ohos.app.ability.UIAbility';

export default class EntryAbility extends UIAbility {
    onCreate(want, launchParam) {
        // 應用初始化
    }
    // ...
}

WindowStageCreate和WindowStageDestroy狀態

在UIAbility實例創建完成后,在進入Foreground之前,系統會創建一個WindowStage。WindowStage創建完成后會觸發onWindowStageCreate()回調,可以在該回調中設置UI界面加載和訂閱WindowStage的事件。

import UIAbility from '@ohos.app.ability.UIAbility';
import Window from '@ohos.window';

export default class EntryAbility extends UIAbility {
    onWindowStageCreate(windowStage: Window.WindowStage) {
        // 設置WindowStage的事件訂閱(獲焦/失焦、可見/不可見)

        // 設置UI界面加載
        windowStage.loadContent('pages/Index', (err, data) => {
            // ...
        });
    }
    // ...
}

// 對應onWindowStageCreate回調,在UIAbility實例銷毀之前,會先進入onWindowStageDestroy回調,可以在該回調中釋放UI界面資源。
export default class EntryAbility extends UIAbility {
    // ...

    onWindowStageDestroy() {
        // 釋放UI界面資源
    }
}

Foreground和Background狀態

Foreground和Background狀態分別在UIAbility實例切換至前臺和切換至后臺時觸發,對應于onForeground()和onBackground()回調。在onForeground()中可以申請系統需要的資源,而在onBackground()中可以釋放UI界面不可見時無用的資源。

import UIAbility from '@ohos.app.ability.UIAbility';

export default class EntryAbility extends UIAbility {
    onForeground() {
        // 申請系統需要的資源,或者重新申請在onBackground中釋放的資源
    }

    onBackground() {
        // 釋放UI界面不可見時無用的資源,或者在此回調中執行較為耗時的操作,例如狀態保存等
    }
}

Destroy狀態

Destroy狀態在UIAbility實例銷毀時觸發,可以在onDestroy()回調中進行系統資源的釋放、數據的保存等操作。

import UIAbility from '@ohos.app.ability.UIAbility';

export default class EntryAbility extends UIAbility {
    onDestroy() {
        // 系統資源的釋放、數據的保存等
    }
}

UIAbility組件啟動模式

UIAbility的啟動模式有三種:singleton(單實例模式)、standard(標準實例模式)、specified(指定實例模式)。

Singleton啟動模式

Singleton啟動模式為單實例模式,是默認的啟動模式。每次調用startAbility()方法時,如果應用進程中該類型的UIAbility實例已經存在,則復用該實例。系統中只存在唯一一個該UIAbility實例。

{
  "module": {
    // ...
    "abilities": [
      {
        "launchType": "singleton",
        // ...
      }
    ]
  }
}

Standard啟動模式

Standard啟動模式為標準實例模式,每次調用startAbility()方法時,都會在應用進程中創建一個新的該類型UIAbility實例。在最近任務列表中可以看到多個該類型的UIAbility實例。

{
  "module": {
    // ...
    "abilities": [
      {
        "launchType": "standard",
        // ...
      }
    ]
  }
}

Specified啟動模式

Specified啟動模式為指定實例模式,允許為UIAbility實例創建一個唯一的Key,后續每次調用startAbility()方法時,都會詢問應用使用哪個Key對應的UIAbility實例來響應請求。

{
  "module": {
    // ...
    "abilities": [
      {
        "launchType": "specified",
        // ...
      }
    ]
  }
}

在指定實例模式下,需要在啟動UIAbility時傳入自定義參數,如"instanceKey",用于區分UIAbility實例。

let want = {
    deviceId: '', // deviceId為空表示本設備
    bundleName: 'com.example.myapplication',
    abilityName: 'FuncAbility',
    moduleName: 'module1', // moduleName非必選
    parameters: { // 自定義信息
        instanceKey: getInstance(),
    },
};

// context

為調用方UIAbility的AbilityContext
this.context.startAbility(want).then(() => {
    // ...
}).catch((err) => {
    // ...
});

在被調用方UIAbility的AbilityStage中,通過onAcceptWant()生命周期回調返回一個字符串Key標識,用于匹配已創建的UIAbility實例。

import AbilityStage from '@ohos.app.ability.AbilityStage';

export default class MyAbilityStage extends AbilityStage {
    onAcceptWant(want): string {
        // 在被調用方的AbilityStage中,針對啟動模式為specified的UIAbility返回一個UIAbility實例對應的一個Key值
        // 當前示例指的是module1 Module的FuncAbility
        if (want.abilityName === 'FuncAbility') {
            // 返回的字符串Key標識為自定義拼接的字符串內容
            return `ControlModule_EntryAbilityInstance_${want.parameters.instanceKey}`;
        }

        return '';
    }
}

例如,在文檔應用中,可以將文件路徑作為一個Key標識,實現每次新建文檔都創建一個新的UIAbility實例,而打開已保存的文檔時重用相應的UIAbility實例。

以上就是HarmonyOS UIAbility組件的概述、聲明配置、生命周期、以及啟動模式的詳細介紹。通過了解這些知識點,開發者可以更好地利用UIAbility組件構建豐富的HarmonyOS應用。

HarmonyOS UIAbility組件進階

WindowStage和UI界面

在HarmonyOS中,UIAbility組件的界面展示主要通過WindowStage和UI界面來實現。WindowStage代表著UIAbility的窗口舞臺,而UI界面則通過加載相應的頁面來完成展示。

WindowStage的創建和銷毀

在UIAbility實例創建完成后,在進入Foreground狀態之前,系統會創建一個WindowStage。在onWindowStageCreate()回調中,可以設置UIAbility要加載的頁面,并訂閱WindowStage的事件。

wKgaomXQYS6AHPH4AAFSRGoaJss975.pngwKgZomXQYKyAPKMnAAFSRGoaJss247.png

import UIAbility from '@ohos.app.ability.UIAbility';
import Window from '@ohos.window';

export default class EntryAbility extends UIAbility {
    onWindowStageCreate(windowStage: Window.WindowStage) {
        // 設置WindowStage的事件訂閱(獲焦/失焦、可見/不可見)

        // 設置UI界面加載
        windowStage.loadContent('pages/Index', (err, data) => {
            // ...
        });
    }

    // ...
}

對應的,在UIAbility實例銷毀之前,會先進入onWindowStageDestroy()回調,可以在該回調中釋放UI界面資源。

import UIAbility from '@ohos.app.ability.UIAbility';

export default class EntryAbility extends UIAbility {
    // ...

    onWindowStageDestroy() {
        // 釋放UI界面資源
    }
}

UI界面的加載

在onWindowStageCreate()回調中,通過loadContent()方法設置UIAbility要加載的頁面。這里的頁面路徑可以是相對路徑,也可以是絕對路徑。

import UIAbility from '@ohos.app.ability.UIAbility';
import Window from '@ohos.window';

export default class EntryAbility extends UIAbility {
    onWindowStageCreate(windowStage: Window.WindowStage) {
        // 設置WindowStage的事件訂閱(獲焦/失焦、可見/不可見)

        // 設置UI界面加載
        windowStage.loadContent('pages/Index', (err, data) => {
            // ...
        });
    }

    // ...
}

生命周期示例

下面以一個簡單的示例說明UIAbility的生命周期狀態變化:

import UIAbility from '@ohos.app.ability.UIAbility';
import Window from '@ohos.window';

export default class EntryAbility extends UIAbility {
    onCreate(want, launchParam) {
        // Create狀態
        console.info('onCreate');
    }

    onWindowStageCreate(windowStage: Window.WindowStage) {
        // WindowStageCreate狀態
        console.info('onWindowStageCreate');

        // 設置UI界面加載
        windowStage.loadContent('pages/Index', (err, data) => {
            // ...
        });
    }

    onForeground() {
        // Foreground狀態
        console.info('onForeground');
    }

    onBackground() {
        // Background狀態
        console.info('onBackground');
    }

    onDestroy() {
        // Destroy狀態
        console.info('onDestroy');
    }
}

在應用加載過程中,onCreate()回調表示Create狀態,之后進入Foreground狀態前會觸發onWindowStageCreate()回調,然后在切換至后臺和銷毀時分別觸發onBackground()和onDestroy()回調。

UIAbility組件啟動模式進階

在前面提到的UIAbility的啟動模式中,除了基本的singleton、standard、specified啟動模式外,還可以根據實際場景進行靈活的配置和使用。

使用singleton啟動模式

singleton啟動模式為單實例模式,默認情況下的啟動模式。每次調用startAbility()方法時,如果應用進程中已存在該類型的UIAbility實例,則系統會復用該實例。系統中只存在唯一一個該UIAbility實例。

`配置文件中的"abilities"標簽下的"launchType"字段配置為"singleton"即可。

{
    "module": {
        // ...
        "abilities": [
            {
                "launchType": "singleton",
                // ...
            }
        ]
    }
}

使用standard啟動模式

standard啟動模式為標準實例模式,每次調用startAbility()方法時,都會在應用進程中創建一個新的該類型UIAbility實例。在最近任務列表中可以看到有多個該類型的UIAbility實例。

wKgaomXQYHaATjz3AADm7sd3zrU426.pngwKgZomXQYS6ANt9yAADm7sd3zrU002.png

在module.json5配置文件中的"abilities"標簽下的"launchType"字段配置為"standard"即可。

{
    "module": {
        // ...
        "abilities": [
            {
                "launchType": "standard",
                // ...
            }
        ]
    }
}

使用specified啟動模式

specified啟動模式為指定實例模式,允許在UIAbility實例創建之前為其創建一個唯一的字符串Key。每次調用startAbility()方法時,會詢問應用使用哪個Key對應的UIAbility實例來響應請求。如果匹配有該UIAbility實例的Key,則直接拉起與之綁定的UIAbility實例,否則創建一個新的UIAbility實例。

在module.json5配置文件中的"abilities"標簽下的"launchType"字段配置為"specified"即可。

{
    "module": {
        // ...
        "abilities": [
            {
                "launchType": "specified",
                // ...
            }
        ]
    }
}

指定實例模式的使用場景

specified啟動模式適用于一些特殊場景,例如文檔應用中每次新建文檔希望都能新建一個文檔實例,而重復打開一個已保存的文檔時希望打開的都是同一個文檔實例。

在使用指定實例模式時,需要在UIAbility實例創建之前為其創建一個唯一的字符串Key。在啟動UIAbility時,通過自定義參數傳遞這個Key,用于匹配已創建的UIAbility實例。

例如,有兩個UIAbility:EntryAbility和FuncAbility,其中FuncAbility配置為specified啟動模式。在EntryAbility中調用startAbility()方法啟動FuncAbility時,需要在want參數中增加一個自定義參數來區別UIAbility實例,例如增加一個"instanceKey"自定義參數。

// 在啟動指定實例模式的UIAbility時,給每一個UIAbility實例配置一個獨立的Key標識
// 例如在文檔使用場景中,可以用文檔路徑作為Key標識
function getInstance() {
    // ...
}

let want = {
    deviceId: '', // deviceId為空表示本設備
    bundleName: 'com.example.myapplication',
    abilityName: 'FuncAbility',
    moduleName: 'module1', // moduleName非必選
    parameters: { // 自定義信息
        instanceKey: getInstance(),
    },
}

// context為調用方UIAbility的AbilityContext
this.context.startAbility(want).then(() => {
    // ...
}).catch((err) => {
    // ...
});

在被調用方UIAbility的AbilityStage中,通過onAcceptWant()生命周期回調返回一個字符串Key標識,用于匹配已創建的UIAbility實例。

import AbilityStage from '@ohos.app.ability.AbilityStage';

export default class MyAbilityStage extends AbilityStage {
    onAcceptWant(want): string {
        // 在被調用方的AbilityStage中,針對啟動模式為specified的UIAbility返回一個UIAbility實例對應的一個Key值
        // 當前示例指的是module1 Module的FuncAbility
        if (want.abilityName === 'FuncAbility') {
            // 返回的字符串Key標識為自定義拼接的字符串內容
            return `ControlModule_EntryAbilityInstance_${want.parameters.instanceKey}`;
        }

        return '';
    }
}

例如,在文檔應用中,可以對不同的文檔實例內容綁定不同的Key值。每次新建文檔時,可以傳入不同的新Key值(如將文件的路徑作為一個Key標識),此時AbilityStage中啟動UIAbility時都會創建一個新的UIAbility實例。而當新建的文檔保存之后,回到桌面,或者新打開一個已保存的文檔,再次打開該已保存的文檔時,AbilityStage中再次啟動該UIAbility時,打開的仍然是之前原來已保存的文檔界面。

// 在文檔應用中,可以對不同的文檔實例內容綁定不同的Key值
// 當每次新建文檔時,傳入不同的新Key值(如可以將文件的路徑作為一個Key標識)
// 此時AbilityStage中啟動UIAbility時都會創建一個新的UIAbility實例
// 而當新建的文檔保存之后,回到桌面,或者新打開一個已保存的文檔,再次打開該已保存的文檔時,
// AbilityStage中再次啟動該UIAbility時,打開的仍然是之前原來已保存的文檔界面

這樣,通過指定實例模式的配置,可以實現更加靈活和符合業務場景的UIAbility啟動方式。

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • ui
    ui
    +關注

    關注

    0

    文章

    204

    瀏覽量

    21376
  • singleton
    +關注

    關注

    0

    文章

    3

    瀏覽量

    5268
  • HarmonyOS
    +關注

    關注

    79

    文章

    1975

    瀏覽量

    30194
收藏 人收藏

    評論

    相關推薦

    鴻蒙Ability Kit(程序框架服務)【UIAbility組件生命周期

    當用戶打開、切換和返回到對應應用時,應用中的UIAbility實例會在其生命周期的不同狀態之間轉換。UIAbility類提供了一系列回調,通過這些回調可以知道當前UIAbility實例
    的頭像 發表于 05-30 21:51 ?1530次閱讀
    鴻蒙Ability Kit(程序框架服務)【<b class='flag-5'>UIAbility</b>組件<b class='flag-5'>生命周期</b>】

    鴻蒙原生應用/元服務開發-Stage模型能力接口(九)上

    @ohos.app.ability.UIAbility (UIAbility) 一、說明 UIAbility是包含UI界面的應用組件,提供組件創建、銷毀、前后臺切換等生命周期回調,同時
    發表于 12-21 15:41

    鴻蒙開發-應用程序框架UIAbility的使用

    ,WindowStageCreate和WindowStageDestroy為窗口管理器(WindowStage)在UIAbility中管理UI界面功能的兩個生命周期回調,從而實現UIAbili
    發表于 01-17 16:36

    理解數據生命周期管理思路

    數據生命周期管理的思考
    發表于 03-17 10:49

    HarmonyOS應用開發-PageAbility生命周期

    pageAbility的生命周期如下圖所示:在代碼中通過調用下列方法實現生命周期操作:onShow() :Ability由后臺不可見狀態切換到前臺可見狀態調用onShow方法,此時用戶在屏幕可以看到
    發表于 10-17 11:11

    在S32G2 RM中有“生命周期”,生命周期的完整含義是什么?

    在S32G2 RM中,有“生命周期”。生命周期的完整含義是什么,我們應該如何使用它?
    發表于 04-23 10:37

    ArkTS語言HarmonyOS/OpenHarmony應用開發-router事件跳轉到指定UIAbility

    = params.targetPage; } } // 如果UIAbility已在后臺運行,在收到Router事件后會觸發onNewWant生命周期回調 onNewWant(want, launchParam
    發表于 06-13 17:22

    HarmonyOS/OpenHarmony應用開發-Stage模型UIAbility組件使用(一)

    文件的索引 // ... } ] } } 復制 二、UIAbility組件生命周期1.概述 當用戶打開、切換和返回到對應應用時,應用中的UIAbility實例會在其生命周期的不同
    發表于 06-28 10:32

    HarmonyOS/OpenHarmony應用開發-Stage模型UIAbility組件使用(一)

    文件的索引 // ... } ] } } 復制 二、UIAbility組件生命周期1.概述 當用戶打開、切換和返回到對應應用時,應用中的UIAbility實例會在其生命周期的不同
    發表于 06-28 10:32

    鴻蒙原生應用/元服務開發-Stage模型能力接口(三)

    : UIAbility, windowStage: window.WindowStage): void; 注冊監聽應用上下文的生命周期后,在wind
    發表于 12-13 10:26

    華為開發者HarmonyOS零基礎入門:生命周期函數應用

    華為開發者HarmonyOS零基礎入門:生命周期函數,結合周期函數找到相關主鍵顯示,最新加載渲染函數。
    的頭像 發表于 10-23 10:52 ?1410次閱讀
    華為開發者<b class='flag-5'>HarmonyOS</b>零基礎入門:<b class='flag-5'>生命周期</b>函數應用

    Synopsys 啟動生命周期管理計劃

    Synopsis 的數據分析驅動的硅生命周期管理計劃解決了 IC 生命周期中的質量、可靠性和安全挑戰。
    發表于 08-18 15:37 ?847次閱讀
    Synopsys <b class='flag-5'>啟動</b>硅<b class='flag-5'>生命周期</b>管理計劃

    Vue入門Vue的生命周期

    .生命周期 4.1生命周期是什么 Vue的生命周期, 就是Vue實例從創建到銷毀的過程.
    的頭像 發表于 02-06 16:16 ?863次閱讀
    Vue入門Vue的<b class='flag-5'>生命周期</b>

    HarmonyOS開發案例:【UIAbility和自定義組件生命周期

    本文檔主要描述了應用運行過程中UIAbility和自定義組件的生命周期。對于UIAbility,描述了Create、Foreground、Background、Destroy四種生命周期
    的頭像 發表于 05-10 15:31 ?1249次閱讀
    <b class='flag-5'>HarmonyOS</b>開發案例:【<b class='flag-5'>UIAbility</b>和自定義組件<b class='flag-5'>生命周期</b>】

    鴻蒙Ability Kit(程序框架服務)【UIAbility組件生命周期】實例

    本文檔主要描述了應用運行過程中UIAbility和自定義組件的生命周期。對于UIAbility,描述了Create、Foreground、Background、Destroy四種生命周期
    的頭像 發表于 05-31 15:03 ?1122次閱讀
    鴻蒙Ability Kit(程序框架服務)【<b class='flag-5'>UIAbility</b>組件<b class='flag-5'>生命周期</b>】實例
    主站蜘蛛池模板: 久久丁香视频| 国产真实乱在线更新| 日本三级11k影院在线| 老师下面很湿很爽很紧| 日本人zzzwww色视频| 91激情网| 91中文在线| 色中色官网| 99久久99久久免费精品蜜桃| 在线观看黄的网站| 五月婷婷色| 97人人干| 91国内视频| 欧美日韩你懂的| 天天干天天干天天干| 久久久国产在线| 久视频在线观看久视频| 久久天天| 亚洲电影在线播放| 成年黄网站免费大全毛片| 最新欧美伦理网| 色偷偷成人| 天天拍夜夜添久久精品免费| 欧美成人免费高清网站| 男人的天堂免费视频| 久久亚洲国产午夜精品理论片| 最近2018中文字幕2019高清| 黄色日本网站| 欧洲色妇| 欧美zooz人与禽交| 久久天天躁狠狠躁夜夜躁综合| 一级a爰片久久毛片| 波多野结衣在线网站| 在线99热| 久久免费特黄毛片| 亚洲娇小性色xxxx| 欧美一级高清免费a| 久久久久免费观看| 午色| 五月深爱婷婷| 伊人最新网址|