华为HarmonyOS NEXT 原生应用开发:APP项目的Stage模型的基本使用,配置 app信息, 以及 UIAbility窗口的基本使用,唤起和切换模块窗口!
·
Stage模型
一、APP图标、名称相关信息配置
1. 配置设置中 应用与服务 中 APP 的 应用信息


2. 配置桌面应用图标和名称

二、UIAbility
APP构成的模型图:
- 一个APP可以由多个模块构成,一个模块可以包含多个UIAbility,一个Ability可以包含多个Page页面。
可以理解为Ability就是个窗口,窗口里面展示Page页面
● 如果是单页面应用:杀死进程程序就关闭了,因为单页面只有一个Ability窗口。
● 如果是多页面应用:一般有多个Ability窗口,你可以杀死你不要的Ability窗口,但是只有全杀死或者意见清空,应用程序就会关闭!例如:微信就是多页面应用。

1. 配置模块中Ability窗口图标和名称

2. 指定Ability窗口中的页面执行
- 两个Ability窗口管理不同的Page页面,可以指定运行哪一个页面。

3. 配置Ability 运行窗口
- 如果需要配置Ability窗口运行配置的话,可以在 module.json5中配置

4. Ability程序窗口的生命周期函数
Ability文件中的生命周期函数
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { window } from '@kit.ArkUI';
export default class twoAbility extends UIAbility {
// 创建 Ability 执行
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
}
// 销毁 Ability 执行
onDestroy(): void {
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');
}
// 当页面窗口创建时 执行
onWindowStageCreate(windowStage: window.WindowStage): void {
// Main window is created, set main page for this ability
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
windowStage.loadContent('pages/TwoPage', (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.');
});
}
// 页面窗口 Ability 销毁 执行
onWindowStageDestroy(): void {
// Main window is destroyed, release UI related resources
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');
}
// 当Ability窗口切换到了前台(打开或者呈现) 执行
onForeground(): void {
// Ability has brought to foreground
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground');
}
// 当切换到后台或者关闭Ability窗口(例如:回到桌面,切换其他窗口或程序)执行
onBackground(): void {
// Ability has back to background
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground');
}
}
5. UIAbility唤起其他UIAbility窗口运行
- 代码示例
// 1. 获取上下文对象, 类型通过断言自己配对
context = getContext(this) as common.UIAbilityContext
Button('美图外卖')
.onClick(() => {
// 2. 准备 want (参数信息)
let wantInfo: Want = {
deviceId: '', // 空表示本设备,给指定的设备id就会跳过去
bundleName: 'com.example.myapplication', // 包名: AppScope/app.json中查看
moduleName: 'entry', // 模块名, Ability所在的模块名
abilityName: 'twoAbility', // 需要跳转的Ability 窗口名(src/main/module.json5)中查看
parameters: {
info: '传递数据: 来自entryAbility'
}
}
// 3. 利用 context startAbility 调起 UIAbility (会返回 Promise 对象)
this.context.startAbility(wantInfo)
.then(() => {
console.log('startAbility 唤起成功!')
})
.catch((error: BusinessError) => {
console.log('startAbility 唤起失败!', error)
})
})
最终点击按钮,就会唤起当前模块下另一个Ability窗口运行指定的页面,这里就是模拟了微信中点击了美团外卖唤起另一个窗口。

6. Ability跨模块换起(切换到另一个模块下的 UIAbility)
-
- 同样的三步骤:和同模块唤起几乎一样,就是修改一下 模块名称 和 Ability 名就可以了。
Button('滴滴打车') // 跨模块演示
.onClick(() => {
// 2. 准备 want (参数信息)
let wantInfo: Want = {
deviceId: '', // 空表示本设备,给指定的设备id就会跳过去
bundleName: 'com.example.myapplication', // 包名: AppScope/app.json中查看
moduleName: 'TestModuleAbility', // 模块名, Ability所在的模块名
abilityName: 'TestModuleAbilityAbility', // 需要跳转的Ability 窗口名(src/main/module.json5)中查看
parameters: {
info: '传递数据: 来自entryAbility'
}
}
// 3. 利用 context startAbility 调起 UIAbility (会返回 Promise 对象)
this.context.startAbility(wantInfo)
.then(() => {
console.log('startAbility 唤起成功!')
})
.catch((error: BusinessError) => {
console.log('startAbility 唤起失败!', error)
})
})

更多推荐



所有评论(0)