当前位置: 首页 > wzjs >正文

安徽做网站网站外链是什么意思

安徽做网站,网站外链是什么意思,个人相册网站模板,wordpress页面相册【HarmonyOS 5】鸿蒙中的UIAbility详解(二) 一、前言 今天我们继续深入讲解UIAbility,根据下图可知,在鸿蒙中UIAbility继承于Ability,开发者无法直接继承Ability。只能使用其两个子类:UIAbility和Extensi…

【HarmonyOS 5】鸿蒙中的UIAbility详解(二)

一、前言

今天我们继续深入讲解UIAbility,根据下图可知,在鸿蒙中UIAbility继承于Ability,开发者无法直接继承Ability。只能使用其两个子类:UIAbility和ExtensionAbility。

在这里插入图片描述

本文将对UIAbility的三种启动模式,数据如何传递,订阅UIAbility生命周期变化,订阅设备的信息变化进行讲解。

二、UIAbility的三种启动模式

singleton(单实例模式),说人话就是单例模式,App任务进度中该UIAbilty只能存在一个。

multiton(多实例模式),说人话就是单例模式,App任务进度中该UIAbilty能存在多个。

specified(指定实例模式),这玩意就有点复杂了,参见下图,主要通过唯一标识key来作为判断量,看该UIAbility是创建新的,还是使用已创建的。

在这里插入图片描述
在module.json5配置文件中的launchType字段配置为singleton,multiton,specified即可。

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

三、UIAbility的数据如何传递

一般而言,UIAbility的数据传递有两种场景:
1、A UIAbility数据传递给 B UIAbility。
2、A UIAbility数据传给内部的page或者自定义view。

同样通用数据传递的方式有以下三种方式进行:
1. 单例对象维护数据
通过单例对象和注册回调的机制,将数据进行传导:


export class EventDataMgr {private static mEventDataMgr : EventDataMgr  | null = null;// 需要处理的数据public mData: XXX | null = null;/*** 获取实例* @returns*/public static Ins(){if(!EventDataMgr .mEventDataMgr ){EventDataMgr .mEventDataMgr = new EventDataMgr();}return EventDataMgr .mEventDataMgr;}
}

2. EventHub,Emitter
我是不建议使用Emitter作为数据传递方案,因为它太重了,使用起来也没有EventHub方便。

而EventHub是从context中获取,所以在多Ability数据共享场景中,需要对EventHub做唯一性处理

import { common } from '@kit.AbilityKit';export class EventHubUtils {private static mEventHub: common.EventHub | null = null;/*** 获取事件通知实例* @returns*/public static getEventHub(){// 封装唯一性。因为在不同window中会导致获取的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共享数据进行传递的业务场景。
LocalStroage用于UIAbility内部到page或者自定义view进行传递传递的业务场景。

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生命周期变化

该场景主要用于统计SDK或者三方应用自己进行业务用户时长交互的数据统计工作。

当进程内的UIAbility生命周期变化时,如创建、可见/不可见、获焦/失焦、销毁等,会触发相应的回调函数。每次注册回调函数时,都会返回一个监听生命周期的ID,此ID会自增+1。当超过监听上限数量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 {// 定义生命周期IDlifecycleId: number = -1;onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {// 定义生命周期回调对象let abilityLifecycleCallback: AbilityLifecycleCallback = {// 当UIAbility创建时被调用onAbilityCreate(uiAbility) {hilog.info(DOMAIN_NUMBER, TAG, `onAbilityCreate uiAbility.launchWant: ${JSON.stringify(uiAbility.launchWant)}`);},// 当窗口创建时被调用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)}`);},// 当窗口处于活动状态时被调用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)}`);},// 当窗口处于非活动状态时被调用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)}`);},// 当窗口被销毁时被调用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被销毁时被调用onAbilityDestroy(uiAbility) {hilog.info(DOMAIN_NUMBER, TAG, `onAbilityDestroy uiAbility.launchWant: ${JSON.stringify(uiAbility.launchWant)}`);},// 当UIAbility从后台转到前台时触发回调onAbilityForeground(uiAbility) {hilog.info(DOMAIN_NUMBER, TAG, `onAbilityForeground uiAbility.launchWant: ${JSON.stringify(uiAbility.launchWant)}`);},// 当UIAbility从前台转到后台时触发回调onAbilityBackground(uiAbility) {hilog.info(DOMAIN_NUMBER, TAG, `onAbilityBackground uiAbility.launchWant: ${JSON.stringify(uiAbility.launchWant)}`);},// 当UIAbility迁移时被调用onAbilityContinue(uiAbility) {hilog.info(DOMAIN_NUMBER, TAG, `onAbilityContinue uiAbility.launchWant: ${JSON.stringify(uiAbility.launchWant)}`);}};// 获取应用上下文let applicationContext = this.context.getApplicationContext();try {// 注册应用内生命周期回调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 {// 获取应用上下文let applicationContext = this.context.getApplicationContext();try {// 取消应用内生命周期回调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}`);}}
}

五、订阅设备的信息变化

该场景主要是系统配置更新时调用。例如设备的语言环境,设备横竖屏状态,深浅模式等。

在UIAbility中onConfigurationUpdate()回调方法中实现监测系统这些配置信息的变化。

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; // 系统当前语言export default class EntryAbility extends UIAbility {onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {systemLanguage = this.context.config.language; // UIAbility实例首次加载时,获取系统当前语言hilog.info(DOMAIN_NUMBER, TAG, `systemLanguage is ${systemLanguage}`);}onConfigurationUpdate(newConfig: Configuration): void {console.info(`envCallback onConfigurationUpdated success: ${JSON.stringify(config)}`);// 表示应用程序的当前语言,例如“zh"。let language = config.language;// 表示深浅色模式,默认为浅色。取值范围://// - COLOR_MODE_NOT_SET:未设置//// - COLOR_MODE_LIGHT:浅色模式//// - COLOR_MODE_DARK:深色模式let colorMode = config.colorMode;// 表示屏幕方向,取值范围://// - DIRECTION_NOT_SET:未设置//// - 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;}// ...
}
http://www.dtcms.com/wzjs/339858.html

相关文章:

  • 媒体查询做响应式网站有哪些长沙竞价优化
  • 天天向上网站建设外贸营销网站建站
  • 可信网站认证图标厦门谷歌seo
  • wordpress垃圾评论插件东莞seo代理
  • 静态网站生成百度搜索排名查询
  • 网站设计制作新报价图片深圳sem竞价托管
  • title 网站建设公司实力搜索引擎优化英文简称为
  • 青岛建设监理协会网站泽成杭州seo网站推广排名
  • 高邮城乡建设局网站seo技术员
  • 深圳建一个网站多少钱今日早间新闻
  • php p2p网站开发广告网
  • 哪里有免费网站空间申请网络营销环境的分析主要是
  • 天津市城乡建设委员会官方网站河南网站优化
  • 国际b2b免费网站最新一周新闻
  • 淘宝联盟网站怎么做国内十大软件测试培训机构
  • 公众号开发 网站开发免费下载百度并安装
  • 门户网站建设好处创建网址快捷方式
  • 杭州网站设计步骤长沙seo排名扣费
  • 搜索引擎成功案例分析windows优化大师功能
  • 施工企业准则天津优化公司哪家好
  • 做php网站西地那非片的功能主治
  • 河南做网站哪个平台好百度舆情
  • 互助盘网站怎么做的sem优化托管
  • app手机网站制作b2b网站大全免费
  • 电商运营培训大概多少学费进行seo网站建设
  • 黑龙江省高速公路建设局网站百度电脑版下载官网
  • angular 做的网站小红书广告投放平台
  • 校园文化宣传主题网站的建设我想在百度上做广告怎么做
  • 外贸网站经典营销案例网站怎么优化排名的方法
  • 苏州招聘网站制作bt磁力天堂torrentkitty