【HarmonyOS应用开发】【Stage模型】启动应用内的UIAbility
当一个应用内包含多个UIAbility时,存在应用内启动UIAbility的场景。例如在支付应用中从入口UIAbility启动收付款UIAbility。假设应用中有两个UIAbility:EntryAbility和EntryAbility2(可以在应用的一个模块中,也可以在的不同模块中),需要从EntryAbility的页面中启动EntryAbility2。
import UIAbility from '@ohos.app.ability.UIAbility';import hilog from '@ohos.hilog';import window from '@ohos.window';export default class EntryAbility 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'); }}
import common from '@ohos.app.ability.common'@Entry@Componentstruct Index { @State message: string = 'Page' private context = getContext(this) as common.UIAbilityContext build() { Row() { Column() { Text(this.message) .fontSize(50) .fontWeight(FontWeight.Bold) Button("跳转到另一个UIAbility") .size({ width: 350, height: 60 }) .fontSize(30) .onClick(() => { let wantInfo = {// 待启动的UIAbility所在设备的Id// deviceId为空表示本设备deviceId: '',// 待启动的UIAbility所在应用的包名bundleName: 'com.example.zrc',// 待启动的UIAbility所在模块的名称moduleName: 'entry',// 待启动的UIAbility的名称abilityName: 'EntryAbility2',// 传递到目标UIAbility的参数parameters: { info: '来自EntryAbility的Index页面',}, } this.context.startAbility(wantInfo) }) } .width('100%') } .height('100%') }}
import UIAbility from '@ohos.app.ability.UIAbility';import hilog from '@ohos.hilog';import window from '@ohos.window';export default class EntryAbility2 extends UIAbility { onCreate(want, launchParam) { // 接收源UIAbility传过来的参数 let info = want?.parameters?.info hilog.info(0x0000, 'ReceivedInfo', '%{public}s', info) 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/Index2', (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'); }}
@Entry@Componentstruct Index2 { @State message: string = 'Page2' build() { Row() { Column() { Text(this.message) .fontSize(50) .fontWeight(FontWeight.Bold) } .width('100%') } .height('100%') }}