鸿蒙开发(七)-UIAbility启动模式

本文详细介绍了鸿蒙系统中UIAbility的启动模式(standard,singleton,specified,multiton),重点讲解了不同模式的工作原理,以及如何在代码中设置和管理实例。包括默认的singleton模式,以及如何通过指定键值创建和复用特定实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

鸿蒙开发(七)-启动模式

根据代码中定义,UIAbility的启动模式有以下几种:

“launchType”: {
“description”: “Indicates the boot mode of ability.”,
“type”: “string”,
“enum”: [
“standard”,
“singleton”,
“specified”,
“multiton”
],
“default”: “singleton”
},
可以看到enum中有四种启动模式:standard,singleton,specified,multiton。

而系统默认的启动模式是singleton

1:standard

standard多实例模式,每次都会新建实例,在最近任务列表中多出一个。

2:singleton

singleton为单实例模式,是默认的启动模式。

如果应用进程中存在该UIAbility实例,则复用系统中的实例,最近列表中只会存在一个该类型的的实例。

3:specified

specified启动模式为指定实例模式,针对一些特殊场景使用(例如文档应用中每次新建文档希望都能新建一个文档实例,重复打开一个已保存的文档希望打开的都是同一个文档实例)。

在UIAbility实例创建之前,允许开发者为该实例创建一个唯一的字符串Key,创建的UIAbility实例绑定Key之后,后续每次调用startAbility()方法时,都会询问应用使用哪个Key对应的UIAbility实例来响应startAbility()请求。运行时由UIAbility内部业务决定是否创建多实例,如果匹配有该UIAbility实例的Key,则直接拉起与之绑定的UIAbility实例,否则创建一个新的UIAbility实例。

4:multiton

multiton也算是多实例,每次都会新建实例,但是最近任务列表中只会有一个。

5:新建Ability以及Page

首先新建ability:

在这里插入图片描述

接着需要输入ability名称(这个是唯一的)。

在这里插入图片描述

填写完成,finish后,默认并不是在当前目录新建了个文件,而是在ets目录下新建了个同名的目录,然后才是Ability文件。

import UIAbility from '@ohos.app.ability.UIAbility';
import hilog from '@ohos.hilog';
import window from '@ohos.window';

export default class EntryAbility4 extends UIAbility {
  onCreate(want, launchParam) {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
  }

  onDestroy() {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');
  }

  onWindowStageCreate(windowStage: window.WindowStage) {
    // Main window is created, set main page for this ability
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');

    windowStage.loadContent('pages/Index', (err, data) => {
      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. Data: %{public}s', JSON.stringify(data) ?? '');
    });
  }

  onWindowStageDestroy() {
    // Main window is destroyed, release UI related resources
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');
  }

  onForeground() {
    // Ability has brought to foreground
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground');
  }

  onBackground() {
    // Ability has back to background
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground');
  }
}

最后还有一点要注意,这里默认的loadContent都是pages/Index.

所以我们还要创建对应的page:

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

下面是每次创建后的模版代码:

@Entry
@Component
struct Page3 {
@State message: string = ‘Hello World’

build() {
Row() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
}
.width(‘100%’)
}
.height(‘100%’)
}
}

另外page的注册信息,还需要在main_pages.json中注册。

当然,如果我们点击新建,studio会自动绑定该信息,如果我们是手动复制代码,拷贝的文件,就需要在json文件中page信息添加了。

6: 添加button,跳转ability

首先,在page文件中获取context:

// 获取UIAbilityContext
let context = getContext(this) as common.UIAbilityContext;

创建want:

let want={
deviceId:“”,
bundleName:“com.zh.test”,
abilityName:“EntryAbility2”
}

添加button,完整的代码如下:

import common from '@ohos.app.ability.common'
@Entry
@Component
struct Page2 {
  @State message: string = 'jump2'

  build() {
    Row() {
      Column() {
        Button(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(()=>{
            // 获取UIAbilityContext
            let context = getContext(this) as common.UIAbilityContext;
            let want={
              deviceId:"",
              bundleName:"com.zh.test",
              abilityName:"EntryAbility2"
            }
            context.startAbility(want)
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

7:修改launchType

在module.json5中修改launchType,验证启动模式。

{
“name”: “EntryAbility4”,
“srcEntry”: “./ets/entryability4/EntryAbility4.ts”,
“description”: “ s t r i n g : E n t r y A b i l i t y 4 d e s c " , " i c o n " : " string:EntryAbility4_desc", "icon": " string:EntryAbility4desc","icon":"media:icon”,
“launchType”: “multiton”,
“label”: “ s t r i n g : E n t r y A b i l i t y 4 l a b e l " , " s t a r t W i n d o w I c o n " : " string:EntryAbility4_label", "startWindowIcon": " string:EntryAbility4label","startWindowIcon":"media:icon”,
“startWindowBackground”: “$color:start_window_background”
}

鸿蒙系统(HarmonyOS)的UIAbility(用户界面能力)框架中,要在`onNewWant`生命周期方法内设置跳转页面,通常你会创建一个新的`AbilityRequest`对象,并指定目标Ability(另一个应用或Ability)。以下是简单的步骤: 1. **导入必要的库**: 首先,你需要导入`com.huawei.hms.ui.AbilityRequest`和相关的依赖。 ```java import com.huawei.hms.app.Ability; import com.huawei.hms.app AbilityManager; ``` 2. **检查权限并创建请求**: 确保已经获取了启动其他Ability的权限。然后,创建一个新的`AbilityRequest`实例,传入目标Ability的信息。 ```java Ability ability = new YourTargetAbility(); // 用具体的Ability替换 AbilityRequest request = new AbilityRequest(ability); request.addCategory(Accessibility.CATEGORY_LAUNCHER); // 设置类别,比如LAUNCHER表示入口点 ``` 3. **设置跳转**: 在`onNewWant`方法中,通过`AbilityManager`实例启动Ability: ```java AbilityManager manager = new AbilityManager(); manager.launchAbility(request); ``` 4. **处理结果**: 如果需要,你可以监听`AbilityManager`的回调来处理启动Ability的结果,如启动成功、失败等。 ```java manager.requestStart(resultCallback); // 定义一个ResultCallback来接收启动结果 ``` 注意:这只是一个基础示例,实际场景可能会更复杂,比如涉及到意图(Intent)、数据传递或Activity的启动模式等。请确保遵循HarmonyOS的官方文档进行操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值