功能场景描述及使用场景specified启动模式为指定实例模式,有一些特殊场景,例如文档应用中每次新建文档希望都能新建一个文档实例,而重复打开的一个已保存的文档都是同一文档实例。使用的核心APIspecified启动模式UIAbility.onNewWant启动uiability的指定页面核心代码1、新建的SpecifiedAbility,将module.json5配置文件的launchType字段配置为specified。2、在启动UIAbility之前,为该UIAbility实例指定一个唯一的字符串instanceKey,这样在调用startAbility()方法时,应用就可以根据指定的instanceKey来识别响应请求的UIAbility实例。在EntryAbility中,调用startAbility()方法时,可以在want参数中增加一个自定义参数,例如instanceKey,以此来区分不同的UIAbility实例。import common from '@ohos.app.ability.common' import Want from '@ohos.app.ability.Want'; import { BusinessError } from '@ohos.base'; @Entry @Component struct Index { getInstance(instance: String){ return 'testKey' + instance; } redirectAbility(key: String){ let context = getContext(this) as common.UIAbilityContext let want: Want = { deviceId: '', bundleName: 'com.example.customizedpagedemo', abilityName: 'SpecifiedAbility', parameters: { target: 'pages/specifiedAbility/SpecifiedDetail', instanceKey: key, }, } context.startAbility(want).then(() => { console.info('startAbility succeeded') }).catch((err: BusinessError) => { console.error(`Failed to start ability. Code is ${err.code}, message is ${err.message}`); }) } build() { Row() { Column() { Text('EntryAbility') .fontSize(50) .fontWeight(FontWeight.Bold) Button('新建一个文档') .backgroundColor(Color.Green) .width(180) .margin({top: 20}) .onClick(() => { this.redirectAbility(this.getInstance('new')); }) Button('打开已保存的文档') .backgroundColor(Color.Green) .width(180) .margin({top: 20}) .onClick(() => { this.redirectAbility(this.getInstance('old')); }) } .width('100%') } .height('100%') } }3、调用startAbilit启动SpecifiedAbility之前,会先进入对应的MyAbilityStage的onAcceptWant()生命周期回调中,以获取该UIAbility实例的Key值。然后系统会自动匹配,如果存在与该UIAbility实例匹配的Key,则会启动与之绑定的UIAbility实例;否则会创建一个新的UIAbility实例。import AbilityStage from '@ohos.app.ability.AbilityStage'; import Want from '@ohos.app.ability.Want'; import hilog from '@ohos.hilog'; export default class MyAbilityStage extends AbilityStage{ onAcceptWant(want: Want): string { hilog.info(0x0000, 'testTag', '%{public}s', 'MyAbilityStage onAcceptWant', JSON.stringify(want) ?? ''); if(want && want.abilityName === 'SpecifiedAbility'){ if(want.parameters.instanceKey){ return `SpecifiedAbilityInstance${want.parameters.instanceKey}`; } } return ''; } }适配版本信息IDE:DevEco Studio 4.1.1.300SDK:HarmoneyOS 4.1.2.1
功能场景描述及使用场景
specified启动模式为指定实例模式,有一些特殊场景,例如文档应用中每次新建文档希望都能新建一个文档实例,而重复打开的一个已保存的文档都是同一文档实例。
使用的核心API
specified启动模式
UIAbility.onNewWant
启动uiability的指定页面
核心代码
1、新建的SpecifiedAbility,将module.json5配置文件的launchType字段配置为specified。
2、在启动UIAbility之前,为该UIAbility实例指定一个唯一的字符串instanceKey,这样在调用startAbility()方法时,应用就可以根据指定的instanceKey来识别响应请求的UIAbility实例。在EntryAbility中,调用startAbility()方法时,可以在want参数中增加一个自定义参数,例如instanceKey,以此来区分不同的UIAbility实例。
3、调用startAbilit启动SpecifiedAbility之前,会先进入对应的MyAbilityStage的onAcceptWant()生命周期回调中,以获取该UIAbility实例的Key值。然后系统会自动匹配,如果存在与该UIAbility实例匹配的Key,则会启动与之绑定的UIAbility实例;否则会创建一个新的UIAbility实例。
适配版本信息
IDE:DevEco Studio 4.1.1.300
SDK:HarmoneyOS 4.1.2.1