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)
            })
        })

在这里插入图片描述

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐