EmbeddedComponent用于支持在当前页面嵌入本应用内其他EmbeddedUIExtensionAbility提供的UI。EmbeddedUIExtensionAbility在独立进程中运行,完成页面布局和渲染。
通常用于有进程隔离诉求的模块化开发场景。
说明:
该组件从API Version 12开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
使用约束
EmbeddedComponent仅支持在拥有多进程权限的设备上使用。
EmbeddedComponent只能在UIAbility中使用,且被拉起的EmbeddedUIExtensionAbility需与UIAbility属于同一应用。
子组件
无
接口
EmbeddedComponent(loader: Want, type: EmbeddedType)
参数:
参数名 | 参数类型 | 必填 | 参数描述 |
---|---|---|---|
loader | Want | 是 | 要加载的EmbeddedUIExtensionAbility。 |
type | EmbeddedType | 是 | 提供方的类型。 |
属性
支持通用属性。
说明:
EmbeddedComponent组件宽高默认值和最小值均为10vp, 不支持如下与宽高相关的属性:“constraintSize”、“aspectRatio”、“layoutWeight”、“flexBasis”、“flexGrow"和"flexShrink”。
事件
与屏幕坐标相关的事件信息会基于EmbeddedComponent的位置宽高进行坐标转换后传递给被拉起的EmbeddedUIExtensionAbility处理。
不支持通用事件。仅支持以下事件:
onTerminated
onTerminated(callback: Callback<TerminationInfo>)
被拉起的EmbeddedUIExtensionAbility通过调用terminateSelfWithResult
或者terminateSelf
正常退出时,触发本回调函数。
参数:
参数名 | 类型 | 说明 |
---|---|---|
callback | Callback<TerminationInfo> | 回调函数,入参用于接收EmbeddedUIExtensionAbility的返回结果,类型为TerminationInfo。 |
说明:
- 若EmbeddedUIExtensionAbility通过调用
terminateSelfWithResult
退出,其携带的信息会传给回调函数的入参;- 若EmbeddedUIExtensionAbility通过调用
terminateSelf
退出,上述回调函数的入参中,“code"取默认值"0”,“want"为"undefined”。
onError
onError(callback: ErrorCallback)
被拉起的EmbeddedUIExtensionAbility在运行过程中发生异常时触发本回调。
参数:
参数名 | 类型 | 说明 |
---|---|---|
callback | ErrorCallback | 回调函数,入参用于接收异常信息,类型为BusinessError,可通过参数中的code 、name 和message 获取错误信息并做处理。 |
说明:
如下情形会触发本回调:
- 通知提供方拉起EmbeddedUIExtensionAbility失败。
- 通知提供方EmbeddedUIExtensionAbility切后台失败。
- 通知提供方销毁EmbeddedUIExtensionAbility失败。
- 提供方EmbeddedUIExtensionAbility异常退出。
- 在EmbeddedUIExtensionAbility中嵌套使用EmbeddedComponent。
TerminationInfo
用于表示被拉起的EmbeddedUIExtensionAbility的返回结果。
属性名 | 类型 | 说明 |
---|---|---|
code | number | 被拉起EmbeddedUIExtensionAbility退出时返回的结果码。 |
want | Want | 被拉起EmbeddedUIExtensionAbility退出时返回的数据。 |
示例
本示例展示EmbeddedComponent组件和EmbeddedUIExtensionAbility的基础使用方式,示例应用的bundleName
为"com.example.embeddeddemo", 被拉起的EmbeddedUIExtensionAbility
为"ExampleEmbeddedAbility".
-
示例应用中的EntryAbility(UIAbility)加载首页文件:
pages/Index.ets
,其中内容如下:// pages/Index.ets -- UIAbility启动时加载此页面 import Want from '@ohos.app.ability.Want' @Entry @Component struct Index { @State message: string = 'Message: ' private want: Want = { bundleName: "com.example.embeddeddemo", abilityName: "ExampleEmbeddedAbility", } build() { Row() { Column() { Text(this.message).fontSize(30) EmbeddedComponent(this.want, EmbeddedType.EMBEDDED_UI_EXTENSION) .width('100%') .height('90%') .onTerminated((info)=>{ this.message = 'Terminarion: code = ' + info.code + ', want = ' + JSON.stringify(info.want); }) .onError((error)=>{ this.message = 'Error: code = ' + error.code; }) } .width('100%') } .height('100%') } }
-
EmbeddedComponent拉起的EmbeddedUIExtensionAbility在
ets/extensionAbility/ExampleEmbeddedAbility
文件中实现,内容如下:import EmbeddedUIExtensionAbility from '@ohos.app.ability.EmbeddedUIExtensionAbility' import UIExtensionContentSession from '@ohos.app.ability.UIExtensionContentSession' import Want from '@ohos.app.ability.Want'; const TAG: string = '[ExampleEmbeddedAbility]' export default class ExampleEmbeddedAbility extends EmbeddedUIExtensionAbility { onCreate() { console.log(TAG, `onCreate`); } onForeground() { console.log(TAG, `onForeground`); } onBackground() { console.log(TAG, `onBackground`); } onDestroy() { console.log(TAG, `onDestroy`); } onSessionCreate(want: Want, session: UIExtensionContentSession) { console.log(TAG, `onSessionCreate, want: ${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(TAG, `onSessionDestroy`); } }
-
EmbeddedUIExtensionAbility的入口页面文件
pages/extension.ets
内容如下:import UIExtensionContentSession from '@ohos.app.ability.UIExtensionContentSession'; let storage = LocalStorage.getShared() @Entry(storage) @Component struct Extension { @State message: string = 'EmbeddedUIExtensionAbility Index'; private session: UIExtensionContentSession | undefined = storage.get<UIExtensionContentSession>('session'); build() { Column() { Text(this.message) .fontSize(20) .fontWeight(FontWeight.Bold) Button("terminateSelfWithResult").fontSize(20).onClick(() => { this.session?.terminateSelfWithResult({ resultCode: 1, want: { bundleName: "com.example.embeddeddemo", abilityName: "ExampleEmbeddedAbility", }}); }) }.width('100%').height('100%') } }
-
最后,示例应用的
module.json5
中的"extensionAbilities"中需要增加一项,具体内容如下:{ "name": "ExampleEmbeddedAbility", "srcEntry": "./ets/extensionAbility/ExampleEmbeddedAbility.ets", "type": "embeddedUI" }
最后
有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)资料用来跟着学习是非常有必要的。
点击→【纯血版鸿蒙全套最新学习资料】希望这一份鸿蒙学习资料能够给大家带来帮助!~
鸿蒙(HarmonyOS NEXT)最新学习路线
该路线图包含基础技能、就业必备技能、多媒体技术、六大电商APP、进阶高级技能、实战就业级设备开发,不仅补充了华为官网未涉及的解决方案
路线图适合人群:
IT开发人员:想要拓展职业边界
零基础小白:鸿蒙爱好者,希望从0到1学习,增加一项技能。
技术提升/进阶跳槽:发展瓶颈期,提升职场竞争力,快速掌握鸿蒙技术
获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料
2.视频学习资料+学习PDF文档
这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、(南向驱动、嵌入式等)鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。
HarmonyOS Next 最新全套视频教程
《鸿蒙 (OpenHarmony)开发基础到实战手册》
OpenHarmony北向、南向开发环境搭建
《鸿蒙开发基础》
《鸿蒙开发进阶》
《鸿蒙进阶实战》
大厂面试必问面试题
鸿蒙南向开发技术
鸿蒙APP开发必备
点击→纯血版全套鸿蒙HarmonyOS学习资料
总结
总的来说,华为鸿蒙不再兼容安卓,对程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,才能在这个变革的时代中立于不败之地。