多HAP场景是指在HarmonyOS中使用多个应用包(一个entry包和多个feature包)来实现复杂应用的开发方式。这种开发模式允许将复杂应用拆分成多个模块,每个模块可以独立开发、测试和更新,提高了开发效率和维护性。
区别于HAR和HSP,每个HAP模块具有各自的UIAbility组件。多HAP应用运行时,同一进程中的UIAbility组件被启动时,才加载对应HAP的资源和代码。Router和Navigation可以实现HAP至HAR/HSP页面的跳转,无法跳转其它HAP页面。可以通过UIAbility中的startAbility方法拉起其它HAP包中的页面。
import { BusinessError } from '@kit.BasicServicesKit';
import { common } from '@kit.AbilityKit';
const BUNDLE_NAME: string = 'com.example.jumphap'; // 在应用app.json5文件中"bundleName"节点获得
const ABILITY_NAME: string = 'TargetHapAbility'; // 在HAP包的对应Ability文件中获得
@Entry
@Component
struct Index {
private context?: common.UIAbilityContext; // 创建context实例
aboutToAppear(): void {
this.context = this.getUIContext().getHostContext() as common.UIAbilityContext; // 获取当前页面关联的UIAbilityContext
}
jumpHap() {
if (this.context) {
// 启动Ability,拉起HAP模块的UIAbility实例
this.context.startAbility({
bundleName: BUNDLE_NAME,
abilityName: ABILITY_NAME
}).then(() => {
console.info('start ability success');
}).catch((error: BusinessError) => {
console.error(`start ability failed, error: ${error}`);
});
}
}
build() {
RelativeContainer() {
Button('startAbility跳转HAP')
.fontSize(25)
.width(350)
.height(50)
.margin({ top: 400 })
.alignRules({
middle: { anchor: '__container__', align: HorizontalAlign.Center }
})
.onClick(() => {
this.jumpHap(); // 点击跳转
});
};
}
}