鸿蒙Harmony开发:ArkTS常用容器组件之-EmbeddedComponent

EmbeddedComponent用于支持在当前页面嵌入本应用内其他EmbeddedUIExtensionAbility提供的UI。EmbeddedUIExtensionAbility在独立进程中运行,完成页面布局和渲染。

通常用于有进程隔离诉求的模块化开发场景。

说明:

该组件从API Version 12开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。

使用约束

EmbeddedComponent仅支持在拥有多进程权限的设备上使用。

EmbeddedComponent只能在UIAbility中使用,且被拉起的EmbeddedUIExtensionAbility需与UIAbility属于同一应用。

子组件

接口

EmbeddedComponent(loader: Want, type: EmbeddedType)

参数:

参数名参数类型必填参数描述
loaderWant要加载的EmbeddedUIExtensionAbility。
typeEmbeddedType提供方的类型。

属性

支持通用属性

说明:

EmbeddedComponent组件宽高默认值和最小值均为10vp, 不支持如下与宽高相关的属性:“constraintSize”、“aspectRatio”、“layoutWeight”、“flexBasis”、“flexGrow"和"flexShrink”。

事件

与屏幕坐标相关的事件信息会基于EmbeddedComponent的位置宽高进行坐标转换后传递给被拉起的EmbeddedUIExtensionAbility处理。

不支持通用事件。仅支持以下事件:

onTerminated

onTerminated(callback: Callback<TerminationInfo>)

被拉起的EmbeddedUIExtensionAbility通过调用terminateSelfWithResult或者terminateSelf正常退出时,触发本回调函数。

参数:

参数名类型说明
callbackCallback<TerminationInfo>回调函数,入参用于接收EmbeddedUIExtensionAbility的返回结果,类型为TerminationInfo

说明:

  • 若EmbeddedUIExtensionAbility通过调用terminateSelfWithResult退出,其携带的信息会传给回调函数的入参;
  • 若EmbeddedUIExtensionAbility通过调用terminateSelf退出,上述回调函数的入参中,“code"取默认值"0”,“want"为"undefined”。

onError

onError(callback: ErrorCallback)

被拉起的EmbeddedUIExtensionAbility在运行过程中发生异常时触发本回调。

参数:

参数名类型说明
callbackErrorCallback回调函数,入参用于接收异常信息,类型为BusinessError,可通过参数中的codenamemessage获取错误信息并做处理。

说明:

如下情形会触发本回调:

  • 通知提供方拉起EmbeddedUIExtensionAbility失败。
  • 通知提供方EmbeddedUIExtensionAbility切后台失败。
  • 通知提供方销毁EmbeddedUIExtensionAbility失败。
  • 提供方EmbeddedUIExtensionAbility异常退出。
  • 在EmbeddedUIExtensionAbility中嵌套使用EmbeddedComponent。

TerminationInfo

用于表示被拉起的EmbeddedUIExtensionAbility的返回结果。

属性名类型说明
codenumber被拉起EmbeddedUIExtensionAbility退出时返回的结果码。
wantWant被拉起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学习资料

总结

总的来说,华为鸿蒙不再兼容安卓,对程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,才能在这个变革的时代中立于不败之地。 

                   

  • 19
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值