您的位置:首页 > 娱乐 > 八卦 > 苹果官网入口_多商户开源商城_推广引流吸引人的标题_爱站网站排行榜

苹果官网入口_多商户开源商城_推广引流吸引人的标题_爱站网站排行榜

2024/12/23 1:55:42 来源:https://blog.csdn.net/woyebuzhidao321/article/details/143692187  浏览:    关键词:苹果官网入口_多商户开源商城_推广引流吸引人的标题_爱站网站排行榜
苹果官网入口_多商户开源商城_推广引流吸引人的标题_爱站网站排行榜

UIAbility 是什么

UIAbility 是 HarmonyOS 中一种包含 UI 界面的应用组件,主要用于与用户进行交互。它也是系统调度的基本单元,为应用提供绘制界面的窗口。一个 UIAbility 组件中可以通过多个页面来实现一个功能模块。

每一个 UIAbility 组件实例,都对应于一个最近任务列表中的任务。因此,对于开发者而言,可以根据具体的场景选择单个或多个 UIAbility。

如何在 UIAbility 组件中添加页面

在 DevEco Studio 中创建的 UIAbility 中,该 UIAbility 实例默认会加载 Index 页面,你可以根据需要将 Index 页面路径替换为需要的页面路径。此外,所有创建的页面都需要在 main_pages.json 配置,通过 DevEco Studio 创建的页面会自动配置,若手动复制 page 文件到 entry > src > main > ets > pages 目录,则需要在 main_pages.json 文件中添加对应的页面路径。

页面间的跳转和数据传递

在 HarmonyOS 中,页面路由指在应用程序中实现不同页面之间的跳转和数据传递。HarmonyOS 提供了 Router 模块,通过不同的 url 地址,可以方便地进行页面路由,轻松地访问不同的页面。Router 模块提供了两种跳转模式,分别是 router.pushUrl() 和 router.replaceUrl()。

//跳转
router.pushUrl({//跳转到的urlurl: CommonConstants.SECOND_URL,// 传递的对象 创建一个新的 routerParams 对象,并设置其中的 src 属性为 CommonConstants.SECOND_SRC_MSGparams: new routerParams(CommonConstants.SECOND_SRC_MSG)
}).catch((error:Error) => {// 如果页面跳转失败,使用 Logger.info 方法打印错误信息到控制台Logger.info(TAG, 'IndexPage push error' + JSON.stringify(error));
});
//点击事件
.onClick(() => {// 设置按钮点击事件的处理函数为一个箭头函数,该函数会执行 router.back() 方法进行页面跳转router.back();
})

UIAbility 的生命周期

UIAbility 的生命周期主要包括以下四个状态:

1.Create:在应用加载过程中,UIAbility 实例创建完成时触发,系统会调用 onCreate()回调。可以在该回调中进行应用初始化操作,例如变量定义、资源加载等,用于后续的 UI 界面展示。
2.Foreground:表示 UIAbility 实例进入前台,用户可以与应用进行交互。在进入 Foreground 之前,系统会创建一个 WindowStage,WindowStage 创建完成后会触发 onWindowStageCreate()回调,可以在该回调中设置 UI 界面加载和订阅 WindowStage 的事件。
3.Background:表示 UIAbility 实例进入后台,用户不可与应用进行交互。当应用从 Foreground 切换到 Background 时,系统会调用 onBackground()回调,可以在该回调中释放资源或执行其他后台操作。
4.Destroy:表示 UIAbility 实例被销毁,系统会调用 onDestroy()回调,可以在该回调中释放资源或执行其他清理操作。

在不同状态之间转换时,系统会调用相应的生命周期回调函数。合理管理 UIAbility 的生命周期可以提高应用的性能和用户体验。当用户打开、切换和返回到应用时,应用中的 UIAbility 实例会在其生命周期的不同状态之间转换。UIAbility 类提供了一系列回调,通过这些回调可以知道当前 UIAbility 实例的某个状态发生改变,会经过 UIAbility 实例的创建和销毁,或者 UIAbility 实例发生了前后台的状态切换。

UIAbility 的生命周期包括 CreateForegroundBackgroundDestroy 四个状态

Create 状态为在应用加载过程中,UIAbility 实例创建完成时触发,系统会调用 onCreate() 回调。可以在该回调中进行页面初始化操作,例如变量定义资源加载等,用于后续的 UI 展示。

import type AbilityConstant from '@ohos.app.ability.AbilityConstant';
import UIAbility from '@ohos.app.ability.UIAbility';
import type Want from '@ohos.app.ability.Want';export default class EntryAbility extends UIAbility {onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {// 页面初始化}
}

说明:
Want 是对象间信息传递的载体,可以用于应用组件间的信息传递。Want 的详细介绍请参见信息传递载体 Want

WindowStageCreateWindowStageDestroy 状态
UIAbility 实例创建完成之后,在进入 Foreground 之前,系统会创建一个 WindowStageWindowStage 创建完成后会进入 onWindowStageCreate() 回调,可以在该回调中设置 UI 加载、设置 WindowStage 的事件订阅。

图2 WindowStageCreateWindowStageDestroy 状态

onWindowStageCreate() 回调中通过 loadContent() 方法设置应用要加载的页面,并根据需要调用 on('windowStageEvent') 方法订阅 WindowStage 的事件(获焦/失焦、可见/不可见)。

import Logger from '../utils/Logger';
import UIAbility from '@ohos.app.ability.UIAbility';
import window from '@ohos.window';export default class EntryAbility extends UIAbility {//...onWindowStageCreate(windowStage: window.WindowStage): void {// 设置 WindowStage 的事件订阅(获焦/失焦、可见/不可见)try {windowStage.on('windowStageEvent', (data) => {let stageEventType: window.WindowStageEventType = data;switch (stageEventType) {case window.WindowStageEventType.SHOWN: // 切到前台Logger.info('windowStage foreground.');break;case window.WindowStageEventType.ACTIVE: // 获焦状态Logger.info('windowStage active.');break;case window.WindowStageEventType.INACTIVE: // 失焦状态Logger.info('windowStage inactive.');break;case window.WindowStageEventType.HIDDEN: // 切到后台Logger.info('windowStage background.');break;default:break;}});} catch (exception) {Logger.error('Failed to enable the listener for window stage event changes. Cause:' + JSON.stringify(exception));}// 设置 UI 加载windowStage.loadContent('pages/Index', (err, data) => {//...});}
}

说明:
WindowStage 的相关使用请参见窗口开发指导。

对应于 onWindowStageCreate() 回调。在 UIAbility 实例销毁之前,则会先进入 onWindowStageDestroy() 回调,可以在该回调中释放 UI 资源。

import Logger from '../utils/Logger';
import UIAbility from '@ohos.app.ability.UIAbility';
import window from '@ohos.window';
import type { BusinessError } from '@ohos.base';export default class EntryAbility extends UIAbility {windowStage: window.WindowStage | undefined = undefined;//...onWindowStageCreate(windowStage: window.WindowStage): void {this.windowStage = windowStage;//...}onWindowStageDestroy() {// 释放 UI 资源}
}

ForegroundBackground 状态
ForegroundBackground 状态分别在 UIAbility 实例切换至前台和切换至后台时触发,对应于 onForeground() 回调和 onBackground() 回调。

onForeground() 回调,在 UIAbility 的 UI 可见之前,如 UIAbility 切换至前台时触发。可以在 onForeground() 回调中申请系统需要的资源,或者重新申请在 onBackground() 中释放的资源。

onBackground() 回调,在 UIAbility 的 UI 完全不可见之后,如 UIAbility 切换至后台时候触发。可以在 onBackground() 回调中释放 UI 不可见时无用的资源,或者在此回调中执行较为耗时的操作,例如状态保存等。

例如应用在使用过程中需要使用用户定位时,假设应用已获得用户的定位权限授权。在 UI 显示之前,可以在 onForeground() 回调中开启定位功能,从而获取到当前的位置信息。

当应用切换到后台状态,可以在 onBackground() 回调中停止定位功能,以节省系统的资源消耗。

import UIAbility from '@ohos.app.ability.UIAbility';export default class EntryAbility extends UIAbility {//...onForeground(): void {// 申请系统需要的资源,或者重新申请在onBackground()中释放的资源}onBackground(): void {// 释放 UI 不可见时无用的资源,或者在此回调中执行较为耗时的操作// 例如状态保存等}
}

Destroy 状态
Destroy 状态在 UIAbility 实例销毁时触发。可以在 onDestroy() 回调中进行系统资源的释放、数据的保存等操作。

例如调用 terminateSelf() 方法停止当前 UIAbility 实例,从而完成 UIAbility 实例的销毁;或者用户使用最近任务列表关闭该 UIAbility 实例,完成 UIAbility 的销毁。

import UIAbility from '@ohos.app.ability.UIAbility';export default class EntryAbility extends UIAbility {//...onDestroy() {// 系统资源的释放、数据的保存等}
}

指定启动页面

在这里插入图片描述

获取上下文

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

数据同步

  1. 使用EventHub - Context(上下文)提供了EventHub对象,提供发布/订阅机制
  2. 使用AppStorage/LocalStorage - App全局/页面级状态存储
  • 再UIAbility中使用 eventHub.on()
export default class EntryAbility extends UIAbility {onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {// 页面初始化hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');//获取UIAbility实例的上下文let context = this.context//获取eventHublet eh = context.eventHub//1.注册一个事件"event1",绑定一个监听函数,处理逻辑eh.on('event1', this.eventFunc)//2.直接使用箭头函数处理eh.on('event1', (data: string) => {//处理逻辑})}//event1对应的监听函数eventFunc(arg1: Context, arg2: Context) {hilog.info(0x0000, 'eventHubTag', `监听到event1的事件参数: ${arg1}, ${arg2}`)}
  • 在页面中使用 eventHub.emit() 方法触发该事件
  private context = getContext(this) as common.UIAbilityContextemitEvent1() {this.context.eventHub.emit('event1') //不带参数this.context.eventHub.emit('event1', 2024) //带参数:1个this.context.eventHub.emit('event1', 999, '这是UIAbility的课') //带参数:2}
  Text(this.message).onClick(() => {this.emitEvent1()})
  • 使用EventHub.off()方法取消该事件订阅

UIAbility间交互

在功能模块间跳转时,可以启动其他UIAbility,或其他应用的(如启动三方支付)

启动应用内的UIAbility

  • 假设有两个:EntryAbility和FuncAbility,需要从EntryAbility的页面中启动FuncAbility。
    在这里插入图片描述
    在entry中新建一个Ability: FuncAbility

在这里插入图片描述
在FuncAbility的onCreate()或onNewWant()中,接收EntryAbility传递过来的参数。

在这里插入图片描述
在FuncAbility业务完成之后,在用terminateSelf()结束自己。

在这里插入图片描述

启动应用内的UIAbility并获取返回结果

在这里插入图片描述

  • 在EntryAbility中,调用startAbilityForResult()接口启动FuncAbility,异步回调中的data用于接收FuncAbility停止自身后返回给EntryAbility信息

在这里插入图片描述
在这里插入图片描述

Text组件示例

在这里插入图片描述
在这里插入图片描述

弹性盒

在这里插入图片描述

Grid网格布局

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com