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

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

【HarmonyOS 5】鴻蒙中的UIAbility詳解(二)

HarmonyOS解決方案 ? 來源:HarmonyOS解決方案 ? 作者:HarmonyOS解決方案 ? 2025-07-11 18:17 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

HarmonyOS 5】鴻蒙中的UIAbility詳解(二)

##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類應(yīng)用 (金融理財#

一、前言

今天我們繼續(xù)深入講解UIAbility,根據(jù)下圖可知,在鴻蒙中UIAbility繼承于Ability,開發(fā)者無法直接繼承Ability。只能使用其兩個子類:UIAbility和ExtensionAbility。
image.png

本文將對UIAbility的三種啟動模式,數(shù)據(jù)如何傳遞,訂閱UIAbility生命周期變化,訂閱設(shè)備的信息變化進行講解。

二、UIAbility的三種啟動模式

singleton(單實例模式),說人話就是單例模式,App任務(wù)進度中該UIAbilty只能存在一個。

multiton(多實例模式),說人話就是單例模式,App任務(wù)進度中該UIAbilty能存在多個。

specified(指定實例模式),這玩意就有點復(fù)雜了,參見下圖,主要通過唯一標識key來作為判斷量,看該UIAbility是創(chuàng)建新的,還是使用已創(chuàng)建的。
image.png

在module.json5配置文件中的launchType字段配置為singleton,multiton,specified即可。

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

三、UIAbility的數(shù)據(jù)如何傳遞

一般而言,UIAbility的數(shù)據(jù)傳遞有兩種場景:
1、A UIAbility數(shù)據(jù)傳遞給 B UIAbility。
2、A UIAbility數(shù)據(jù)傳給內(nèi)部的page或者自定義view。

同樣通用數(shù)據(jù)傳遞的方式有以下三種方式進行:
1. 單例對象維護數(shù)據(jù)
通過單例對象和注冊回調(diào)的機制,將數(shù)據(jù)進行傳導(dǎo):

export class EventDataMgr {

  private static mEventDataMgr : EventDataMgr  | null = null;

  // 需要處理的數(shù)據(jù)
  public mData: XXX | null = null;

  /**
   * 獲取實例
   * @returns
   */
  public static Ins(){

    if(!EventDataMgr .mEventDataMgr ){
      EventDataMgr .mEventDataMgr = new EventDataMgr();
    }
    return EventDataMgr .mEventDataMgr;
  }
}

2. EventHub,Emitter
我是不建議使用Emitter作為數(shù)據(jù)傳遞方案,因為它太重了,使用起來也沒有EventHub方便。

而EventHub是從context中獲取,所以在多Ability數(shù)據(jù)共享場景中,需要對EventHub做唯一性處理

import { common } from '@kit.AbilityKit';

export class EventHubUtils {

  private static mEventHub: common.EventHub | null = null;

  /**
   * 獲取事件通知實例
   * @returns
   */
  public static getEventHub(){
    // 封裝唯一性。因為在不同window中會導(dǎo)致獲取的eventhub 不是一個。
    if(!EventHubUtils.mEventHub){
      let context = getContext() as common.UIAbilityContext;
      EventHubUtils.mEventHub = context.eventHub;
      console.log("EventHubUtils", "EventIns mEventHub done !");
    }
    return EventHubUtils.mEventHub;
  }
}

3. AppStroage或者LocalStroage
AppStroage主要用于多UIAbility共享數(shù)據(jù)進行傳遞的業(yè)務(wù)場景。
LocalStroage用于UIAbility內(nèi)部到page或者自定義view進行傳遞傳遞的業(yè)務(wù)場景。

import { UIAbility } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { window } from '@kit.ArkUI';

export default class EntryAbility extends UIAbility {

  storage: LocalStorage = new LocalStorage();

  onWindowStageCreate(windowStage: window.WindowStage): void {
    windowStage.loadContent('pages/Index', this.storage, (err) = > {
      if (err.code) {
        hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
        return;
      }
      hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.');
    });
  }

}

四、訂閱UIAbility生命周期變化

該場景主要用于統(tǒng)計SDK或者三方應(yīng)用自己進行業(yè)務(wù)用戶時長交互的數(shù)據(jù)統(tǒng)計工作。

當進程內(nèi)的UIAbility生命周期變化時,如創(chuàng)建、可見/不可見、獲焦/失焦、銷毀等,會觸發(fā)相應(yīng)的回調(diào)函數(shù)。每次注冊回調(diào)函數(shù)時,都會返回一個監(jiān)聽生命周期的ID,此ID會自增+1。當超過監(jiān)聽上限數(shù)量2^63-1時,會返回-1。

import { AbilityConstant, AbilityLifecycleCallback, UIAbility, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { window } from '@kit.ArkUI';
import  { BusinessError } from '@kit.BasicServicesKit';


const TAG: string = '[LifecycleAbility]';
const DOMAIN_NUMBER: number = 0xFF00;


export default class LifecycleAbility extends UIAbility {
  // 定義生命周期ID
  lifecycleId: number = -1;


  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    // 定義生命周期回調(diào)對象
    let abilityLifecycleCallback: AbilityLifecycleCallback = {
      // 當UIAbility創(chuàng)建時被調(diào)用
      onAbilityCreate(uiAbility) {
        hilog.info(DOMAIN_NUMBER, TAG, `onAbilityCreate uiAbility.launchWant: ${JSON.stringify(uiAbility.launchWant)}`);
      },
      // 當窗口創(chuàng)建時被調(diào)用
      onWindowStageCreate(uiAbility, windowStage: window.WindowStage) {
        hilog.info(DOMAIN_NUMBER, TAG, `onWindowStageCreate uiAbility.launchWant: ${JSON.stringify(uiAbility.launchWant)}`);
        hilog.info(DOMAIN_NUMBER, TAG, `onWindowStageCreate windowStage: ${JSON.stringify(windowStage)}`);
      },
      // 當窗口處于活動狀態(tài)時被調(diào)用
      onWindowStageActive(uiAbility, windowStage: window.WindowStage) {
        hilog.info(DOMAIN_NUMBER, TAG, `onWindowStageActive uiAbility.launchWant: ${JSON.stringify(uiAbility.launchWant)}`);
        hilog.info(DOMAIN_NUMBER, TAG, `onWindowStageActive windowStage: ${JSON.stringify(windowStage)}`);
      },
      // 當窗口處于非活動狀態(tài)時被調(diào)用
      onWindowStageInactive(uiAbility, windowStage: window.WindowStage) {
        hilog.info(DOMAIN_NUMBER, TAG, `onWindowStageInactive uiAbility.launchWant: ${JSON.stringify(uiAbility.launchWant)}`);
        hilog.info(DOMAIN_NUMBER, TAG, `onWindowStageInactive windowStage: ${JSON.stringify(windowStage)}`);
      },
      // 當窗口被銷毀時被調(diào)用
      onWindowStageDestroy(uiAbility, windowStage: window.WindowStage) {
        hilog.info(DOMAIN_NUMBER, TAG, `onWindowStageDestroy uiAbility.launchWant: ${JSON.stringify(uiAbility.launchWant)}`);
        hilog.info(DOMAIN_NUMBER, TAG, `onWindowStageDestroy windowStage: ${JSON.stringify(windowStage)}`);
      },
      // 當UIAbility被銷毀時被調(diào)用
      onAbilityDestroy(uiAbility) {
        hilog.info(DOMAIN_NUMBER, TAG, `onAbilityDestroy uiAbility.launchWant: ${JSON.stringify(uiAbility.launchWant)}`);
      },
      // 當UIAbility從后臺轉(zhuǎn)到前臺時觸發(fā)回調(diào)
      onAbilityForeground(uiAbility) {
        hilog.info(DOMAIN_NUMBER, TAG, `onAbilityForeground uiAbility.launchWant: ${JSON.stringify(uiAbility.launchWant)}`);
      },
      // 當UIAbility從前臺轉(zhuǎn)到后臺時觸發(fā)回調(diào)
      onAbilityBackground(uiAbility) {
        hilog.info(DOMAIN_NUMBER, TAG, `onAbilityBackground uiAbility.launchWant: ${JSON.stringify(uiAbility.launchWant)}`);
      },
      // 當UIAbility遷移時被調(diào)用
      onAbilityContinue(uiAbility) {
        hilog.info(DOMAIN_NUMBER, TAG, `onAbilityContinue uiAbility.launchWant: ${JSON.stringify(uiAbility.launchWant)}`);
      }
    };
    // 獲取應(yīng)用上下文
    let applicationContext = this.context.getApplicationContext();
    try {
      // 注冊應(yīng)用內(nèi)生命周期回調(diào)
      this.lifecycleId = applicationContext.on('abilityLifecycle', abilityLifecycleCallback);
    } catch (err) {
      let code = (err as BusinessError).code;
      let message = (err as BusinessError).message;
      hilog.error(DOMAIN_NUMBER, TAG, `Failed to register applicationContext. Code is ${code}, message is ${message}`);
    }


    hilog.info(DOMAIN_NUMBER, TAG, `register callback number: ${this.lifecycleId}`);
  }
  //...
  onDestroy(): void {
    // 獲取應(yīng)用上下文
    let applicationContext = this.context.getApplicationContext();
    try {
      // 取消應(yīng)用內(nèi)生命周期回調(diào)
      applicationContext.off('abilityLifecycle', this.lifecycleId);
    } catch (err) {
      let code = (err as BusinessError).code;
      let message = (err as BusinessError).message;
      hilog.error(DOMAIN_NUMBER, TAG, `Failed to unregister applicationContext. Code is ${code}, message is ${message}`);
    }
  }
}

五、訂閱設(shè)備的信息變化

該場景主要是系統(tǒng)配置更新時調(diào)用。例如設(shè)備的語言環(huán)境,設(shè)備橫豎屏狀態(tài),深淺模式等。

在UIAbility中onConfigurationUpdate()回調(diào)方法中實現(xiàn)監(jiān)測系統(tǒng)這些配置信息的變化。

import { AbilityConstant, Configuration, UIAbility, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';


const TAG: string = '[EntryAbility]';
const DOMAIN_NUMBER: number = 0xFF00;


let systemLanguage: string | undefined; // 系統(tǒng)當前語言


export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    systemLanguage = this.context.config.language; // UIAbility實例首次加載時,獲取系統(tǒng)當前語言
    hilog.info(DOMAIN_NUMBER, TAG, `systemLanguage is ${systemLanguage}`);
  }


  onConfigurationUpdate(newConfig: Configuration): void {
            console.info(`envCallback onConfigurationUpdated success: ${JSON.stringify(config)}`);
        // 表示應(yīng)用程序的當前語言,例如“zh"。
        let language = config.language;
        // 表示深淺色模式,默認為淺色。取值范圍:
        //
        // - COLOR_MODE_NOT_SET:未設(shè)置
        //
        // - COLOR_MODE_LIGHT:淺色模式
        //
        // - COLOR_MODE_DARK:深色模式
        let colorMode = config.colorMode;
        // 表示屏幕方向,取值范圍:
        //
        // - DIRECTION_NOT_SET:未設(shè)置
        //
        // - DIRECTION_HORIZONTAL:水平方向
        //
        // - DIRECTION_VERTICAL:垂直方向
        let direction = config.direction;
        let screenDensity = config.screenDensity;
        let displayId = config.displayId;
        let hasPointerDevice = config.hasPointerDevice;
        let fontId = config.fontId;
        let fontSizeScale = config.fontSizeScale;
        let fontWeightScale = config.fontWeightScale;
        let mcc = config.mcc;
        let mnc = config.mnc;
  }
  // ...
}

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 鴻蒙
    +關(guān)注

    關(guān)注

    60

    文章

    2613

    瀏覽量

    44010
  • HarmonyOS
    +關(guān)注

    關(guān)注

    80

    文章

    2121

    瀏覽量

    32898
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

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

    UIAbility組件概述 UIAbility組件是HarmonyOS中一種包含UI界面的應(yīng)用組件,主要用于與用戶進行交互。每個UIAbility組件實例對應(yīng)最近任務(wù)列表
    的頭像 發(fā)表于 02-17 15:33 ?2206次閱讀
    深入理解<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>UIAbility</b>:生命周期、WindowStage與啟動模式探析

    HarmonyOS開發(fā)案例:【UIAbility內(nèi)和UIAbility間頁面的跳轉(zhuǎn)】

    基于Stage模型下的UIAbility開發(fā),實現(xiàn)UIAbility內(nèi)和UIAbility間頁面的跳轉(zhuǎn)。
    的頭像 發(fā)表于 05-09 15:06 ?2208次閱讀
    <b class='flag-5'>HarmonyOS</b>開發(fā)案例:【<b class='flag-5'>UIAbility</b>內(nèi)和<b class='flag-5'>UIAbility</b>間頁面的跳轉(zhuǎn)】

    鴻蒙開發(fā)-應(yīng)用程序框架UIAbility的使用

    ,都對應(yīng)于一個最近任務(wù)列表的任務(wù)。 一個應(yīng)用可以有一個UIAbility,也可以有多個UIAbility,如下圖所示。例如瀏覽器應(yīng)用可以通過一個UIAbility結(jié)合多頁面的形式讓用
    發(fā)表于 01-17 16:36

    HarmonyOS 5】VisionKit人臉活體檢測詳解

    HarmonyOS 5】VisionKit人臉活體檢測詳解 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##
    的頭像 發(fā)表于 06-21 11:52 ?276次閱讀
    【<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b>】VisionKit人臉活體檢測<b class='flag-5'>詳解</b>

    HarmonyOS 5 makeObserved接口詳解

    HarmonyOS 5】makeObserved接口詳解 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##
    的頭像 發(fā)表于 06-16 17:58 ?273次閱讀

    HarmonyOS 5鴻蒙應(yīng)用隱私保護詳解

    HarmonyOS 5鴻蒙應(yīng)用隱私保護詳解 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK
    的頭像 發(fā)表于 07-11 18:30 ?231次閱讀

    HarmonyOS 5鴻蒙中進度條的使用詳解

    HarmonyOS 5鴻蒙中進度條的使用詳解 ##鴻蒙開發(fā)能力 ##HarmonyOS SD
    的頭像 發(fā)表于 07-11 18:26 ?175次閱讀
    【<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b>】<b class='flag-5'>鴻蒙</b>中進度條的使用<b class='flag-5'>詳解</b>

    HarmonyOS 5鴻蒙星閃NearLink詳解

    HarmonyOS 5鴻蒙星閃NearLink詳解 ##鴻蒙開發(fā)能力 ##HarmonyOS
    的頭像 發(fā)表于 07-11 18:24 ?257次閱讀
    【<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b>】<b class='flag-5'>鴻蒙</b>星閃NearLink<b class='flag-5'>詳解</b>

    HarmonyOS 5鴻蒙mPaaS詳解

    HarmonyOS 5鴻蒙mPaaS詳解 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)
    的頭像 發(fā)表于 07-11 18:23 ?235次閱讀
    【<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b>】<b class='flag-5'>鴻蒙</b>mPaaS<b class='flag-5'>詳解</b>

    HarmonyOS 5】金融應(yīng)用開發(fā)鴻蒙組件實踐

    HarmonyOS 5】金融應(yīng)用開發(fā)鴻蒙組件實踐 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##
    的頭像 發(fā)表于 07-11 18:20 ?227次閱讀
    【<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b>】金融應(yīng)用開發(fā)<b class='flag-5'>鴻蒙</b>組件實踐

    HarmonyOS 5鴻蒙UIAbility詳解(三)

    HarmonyOS 5鴻蒙UIAbility詳解(三) ##
    的頭像 發(fā)表于 06-14 22:32 ?31次閱讀

    HarmonyOS 5】桌面快捷方式功能實現(xiàn)詳解

    HarmonyOS 5】桌面快捷方式功能實現(xiàn)詳解 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##
    的頭像 發(fā)表于 06-21 16:42 ?272次閱讀
    【<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b>】桌面快捷方式功能實現(xiàn)<b class='flag-5'>詳解</b>

    HarmonyOS 5 入門系列 】鴻蒙HarmonyOS示例項目講解

    HarmonyOS 5 入門系列 】鴻蒙HarmonyOS示例項目講解 ##鴻蒙開發(fā)能力 ##Har
    的頭像 發(fā)表于 07-07 11:57 ?137次閱讀
    【 <b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b> 入門系列 】<b class='flag-5'>鴻蒙</b><b class='flag-5'>HarmonyOS</b>示例項目講解

    鴻蒙Stage模型與FA模型詳解

    HarmonyOS 5鴻蒙Stage模型與FA模型詳解 ##鴻蒙開發(fā)能力 ##
    的頭像 發(fā)表于 07-07 11:50 ?144次閱讀

    鴻蒙應(yīng)用px,vp,fp概念詳解

    HarmonyOS 5鴻蒙應(yīng)用px,vp,fp概念詳解 ##鴻蒙開發(fā)能力 ##HarmonyOS
    的頭像 發(fā)表于 07-07 11:48 ?133次閱讀
    <b class='flag-5'>鴻蒙</b>應(yīng)用px,vp,fp概念<b class='flag-5'>詳解</b>
    主站蜘蛛池模板: 中国一级特黄真人毛片免费看 | 午夜视频在线观看一区 | 性生大片一级毛片免费观看 | 成年网站在线看 | 精品一区二区三区免费爱 | 色多多视频成人影院 | 午夜美女视频在线观看高清 | 在线网址你懂的 | 一级特黄性色生活片一区二区 | 亚洲成网站www久久九 | 在线理论视频 | 天天添天天射 | 欧美爆操| 欧美亚洲天堂网 | 黄色美女网站免费 | 天天色影综合网 | 亚洲成人三级 | 激情www| 四虎地址8848最新章节 | 九九热最新| 天堂社区在线视频 | 亚洲天堂亚洲天堂 | 亚洲色图图片 | 黄网站色在线视频免费观看 | 亚洲日本视频在线观看 | 大尺度视频网站久久久久久久久 | 久久久久青草 | 乱子伦xxxx厨房 | 国产午夜精品理论片在线 | 狼色视频在线观免费观看 | 搜索黄色录像 | 中文字幕在线一区二区三区 | 欧美操穴 | 亚洲国产高清精品线久久 | 色天使亚洲综合在线观看 | 四虎4444hu4影视最新地址 | 51久久 | 一级特黄aa大片一又好看 | 国产精品网站在线进入 | 亚洲国内精品久久 | 国产综合视频 |