
回复
本文旨在深入探讨华为鸿蒙HarmonyOS Next系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。
在华为鸿蒙系统的舞台上,UIAbility 组件是主角,负责与用户进行交互,而嵌入式 UI 扩展组件则是舞台上的配角,负责扩展应用的功能,并实现跨越进程界限的界面嵌入,为用户带来更加丰富和便捷的交互体验。
想象一下,你正在观看一场舞台剧,舞台上的演员正在表演,突然,舞台的另一边出现了一扇门,门打开后,另一个舞台上的演员出现在观众面前,并与观众进行互动。这就是嵌入式 UI 扩展组件所能实现的功能,它可以将另一个 UIAbility 的界面嵌入到当前 UIAbility 的页面中,实现跨越进程界限的界面嵌入,为用户带来更加丰富和便捷的交互体验。
嵌入式 UI 扩展组件的优势:
开发嵌入式 UI 扩展组件需要以下步骤:
import { EmbeddedUIExtensionAbility, UIExtensionContentSession, Want } from '@kit.AbilityKit';
export default class ExampleEmbeddedAbility extends EmbeddedUIExtensionAbility {
onCreate() {
console.log('[ExampleEmbeddedAbility] onCreate');
}
onSessionCreate(want: Want, session: UIExtensionContentSession) {
console.log('[ExampleEmbeddedAbility] onSessionCreate, want: %s', JSON.stringify(want));
let param: Record<string, UIExtensionContentSession> = {
'session': session,
};
let storage: LocalStorage = new LocalStorage(param);
session.loadContent('pages/extension', storage);
}
onSessionDestroy(session: UIExtensionContentSession) {
console.log('[ExampleEmbeddedAbility] onSessionDestroy');
}
onForeground() {
console.log('[ExampleEmbeddedAbility] onForeground');
}
onBackground() {
console.log('[ExampleEmbeddedAbility] onBackground');
}
onDestroy() {
console.log('[ExampleEmbeddedAbility] onDestroy');
}
}
开发者可以根据应用需求开发嵌入式 UI 扩展组件,并实现跨越进程界限的界面嵌入功能。
使用嵌入式 UI 扩展组件需要以下步骤:
import { Want } from '@kit.AbilityKit';
let want: Want = {
deviceId: '', // deviceId为空表示本设备
bundleName: 'com.example.myapplication',
abilityName: 'ExampleEmbeddedAbility',
moduleName: 'entry', // moduleName非必选
parameters: {
// 自定义信息
},
};
let embeddedComponent = new EmbeddedComponent(this.want, EmbeddedType.EMBEDDED_UI_EXTENSION);
this.$element.appendChild(embeddedComponent);
可以根据应用需求使用嵌入式 UI 扩展组件,并实现跨越进程界限的界面嵌入功能。
嵌入式 UI 扩展组件运行在独立的进程中,与其他 UIAbility 的进程隔离,提高了系统的安全性和稳定性。
嵌入式 UI 扩展组件的进程模型: