【HarmonyOS 4.0】UIAbility 组件

1. 什么是 UIAbility?

  1. 相当于界面框架,当我们启动一个手机app程序,就会自然而然开启一个界面框架。每一个程序至少有一个UIAbility。
  2. 每一个 UIAbility 实例,都对应于一个最近任务列表中的任务。
  3. UIAbility 是一种包含用户界面的应用组件,主要用于和用户进行交互。交互形式有如下三种:
    3.1 点击桌面图标进入应用
    3.2 从一个应用拉起另外一个应用
    3.3 最近任务列表切回应用
  4. 一个应用可以有一个 UIAbility,也可以有多个 UIAbility。
  5. 一个 UIAbility 可以有多个页面,并且可以互相跳转。
// 窗口舞台创建的时候
onWindowStageCreate(windowStage: window.WindowStage): void {
  hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
  // 一个 Ability 可以有多个页面,并且可以互相跳转。配置加载哪个页面。
  windowStage.loadContent('pages/Index', (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.');
  });
}

2. UIAbility 组件生命周期钩子函数

2.1 UIAbility 组件生命周期钩子函数:

  • onCreate(): 状态为在应用加载过程中,UIAbility实例创建完成时触发,系统会调用onCreate() 回调。可以在该回调中进行页面初始化操作,例如变量定义资源加载等,用于后续的UI界面展示。
  • onForeground(): UIAbility切换至前台时触发,可在该函数中加载所需的系统资源。
  • onBackground(): UIAbility切换至后台时候触发,可在该函数中释放系统资源。
  • onDestroy(): UIAbility实例销毁时触发,可在该函数中释放系统资源,保存数据。

2.2 WindowStage 生命周期钩子函数:

  • onWindowStageCreate(): 窗口舞台搭建时,页面只会被创建一次,UIAbility来回切换,会来回调用onForeground() 和 onBackground(),不会再调用 onWindowStageCreate()。可在该函数中设置应用加载的初始页面。
  • onWindowStageDestroy(): 也只调用一次。

2.3 整个生命周期钩子函数:
UIAbility Start > onCreate() > onWindowStageCreate() > onForeground() > onBackground() > onWindowStageDestroy() > onDestroy() > UIAbility End

3 UIAbility 组件启动模式

3.1 配置默认启动页:如果我们在一个 entry 模块添加名字为 TwoAbility 的 UIAbility,可以修改 entry > src > main > module.json5 配置文件,来修改应用程序的默认启动入口为 TwoAbility。只需要把 exportedskills 这俩个属性放在需要默认启动的 ability 对象里就OK。

   "abilities": [
      {
       "name": "EntryAbility",
        "srcEntry": "./ets/entryability/EntryAbility.ets",
        "description": "$string:EntryAbility_desc",
        "icon": "$media:layered_image",
        "label": "$string:EntryAbility_label",
        "startWindowIcon": "$media:startIcon",
        "startWindowBackground": "$color:start_window_background",
      },
      {
        "name": "TwoAbility",
        "srcEntry": "./ets/twoability/TwoAbility.ets",
        "description": "$string:TwoAbility_desc",
        "icon": "$media:layered_image",
        "label": "$string:TwoAbility_label",
        "startWindowIcon": "$media:startIcon",
        "startWindowBackground": "$color:start_window_background",
        "exported": true,
        "skills": [
          {
            "entities": [
              "entity.system.home"
            ],
            "actions": [
             "action.system.home"
            ]
         }
        ]
      }
    ]

4 UIAbility 组件基本用法

5 UIAbility 组件与UI的数据同步

6 UIAbility 组件间交互(设备内)

6.1 在同一个模块,从一个 UIAbility 唤起另一个 UIAbility。

  • 准备 want 作为 UIAbility 实例启动的入口参数
  • 利用上下文对象 contextstartAbility() 方法,传入 want 参数来启动另一个 UIAbility。
context = getContext(this) as common.UIAbilityContext

let wantInfo: Want = {
    deviceId: '', // deviceId为空表示本设备
    bundleName: 'com.example.myapplication', // AppScope/app.json5
    abilityName: 'TwoAbility', // 需要唤起的UIAbility的name 。entry/src/main/module.json5
    moduleName: 'entry', // 模块名,非必选
    parameters: { // 自定义信息
        info: '来自EntryAbility Index页面',
    },
}

// context为 调用方UIAbility 的 AbilityContext。返回一个 Promise 对象。
this.context.startAbility(wantInfo).then(() => {
    // ...
}).catch((error: BusinessError) => {
    // ...
})

6.2 在不同的模块(跨模块),从一个 UIAbility 唤起另一个 UIAbility。

  • 准备 want 作为 UIAbility 实例启动的入口参数
  • 利用上下文对象 contextstartAbility() 方法,传入 want 参数来启动另一个 UIAbility。
  • 修改 DevEco Studio 编辑配置,选择 Deploy Multi Hap
    在这里插入图片描述
context = getContext(this) as common.UIAbilityContext

let wantInfo: Want = {
    deviceId: '', // deviceId为空表示本设备
    bundleName: 'com.example.myapplication', // AppScope/app.json5
    abilityName: 'TestModuleAbility', // 需要唤起的UIAbility的name 。TestModule/src/main/module.json5
    moduleName: 'TestModule', // 模块名,非必选
    parameters: { // 自定义信息
        info: '来自EntryAbility Index页面',
    },
}

// context为 调用方UIAbility 的 AbilityContext。返回一个 Promise 对象。
this.context.startAbility(wantInfo).then(() => {
    // ...
}).catch((error: BusinessError) => {
    // ...
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值