DynamicComponent (系统接口)

DynamicComponent用于支持在本页面内嵌入显示独立Abc(.abc文件)提供的UI,展示的内容在Worker线程中运行。

通常用于动态加载Abc页面的模块化开发场景。

说明:

  • 本模块为系统接口。
  • 本模块接口仅可在Stage模型下使用。

起始版本: 26.0.0

子组件

接口

DynamicComponent(options: DynamicOptions)

创建DynamicComponent组件,用于显示Worker线程中运行的Abc UI。

起始版本: 26.0.0

系统接口: 此接口为系统接口。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名 类型 必填 说明
options DynamicOptions DynamicComponent的构造配置参数,用于配置要加载的Abc页面入口、运行Worker及显示选项。

Worker

type Worker = Worker

用于运行Abc的Worker线程对象。

起始版本: 26.0.0

系统接口: 此接口为系统接口。

系统能力: SystemCapability.ArkUI.ArkUI.Full

类型 说明
Worker 用于在独立线程中运行Abc。

ErrorCallback

type ErrorCallback = ErrorCallback

错误回调类型,用于接收异常信息。

起始版本: 26.0.0

系统接口: 此接口为系统接口。

系统能力: SystemCapability.ArkUI.ArkUI.Full

类型 说明
ErrorCallback 用于接收运行过程中的异常信息。

DynamicOptions

用于在DynamicComponent构造时传递参数。

起始版本: 26.0.0

系统接口: 此接口为系统接口。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

名称 类型 只读 可选 说明
entryPoint string 要加载的abc页面入口。
worker Worker 运行Abc的Worker。
backgroundTransparent boolean 是否启用组件背景透明。
true:启用背景透明;false:不启用背景透明。
默认值:false
allowCrossProcessNesting boolean 是否允许跨进程UIExtensionComponent嵌套。
true:允许跨进程嵌套;false:不允许跨进程嵌套。
默认值:false

属性

支持通用属性

事件

支持以下事件:

onError

onError(callback: ErrorCallback)

DynamicComponent运行过程中发生异常时触发该回调。使用callback异步回调。

起始版本: 26.0.0

系统接口: 此接口为系统接口。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名 类型 必填 说明
callback ErrorCallback 回调函数,入参用于接收异常信息。

示例

示例1(加载独立Abc页面并监听运行异常)

本示例展示了DynamicComponent的基本用法,通过配置DynamicOptions加载指定Worker线程中运行的Abc页面,并通过onError回调处理运行异常。

从API版本26.0.0开始,新增onError事件。

import { worker } from '@kit.ArkTS';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';

@Entry
@Component
struct Index {
  @State errorMessage: string = '';
  private worker?: worker.ThreadWorker = new worker.ThreadWorker(
    "entry/ets/workers/Worker.ets", { name: "dc-worker" }
  )

  build() {
    Column() {
      Text('DynamicComponent示例').fontSize(20).margin(10)

      if (this.errorMessage) {
        Text('错误信息: ' + this.errorMessage).fontSize(14).fontColor(Color.Red).margin(10)
      }

      DynamicComponent({
        entryPoint: 'com.example.myapplication/entry/ets/pages/DynamicPage',
        worker: this.worker,
        backgroundTransparent: false,
        allowCrossProcessNesting: false
      })
        .width('100%')
        .height('60%')
        .onError((error: BusinessError) => {
          this.errorMessage = `code: ${error.code}, message: ${error.message}`;
          hilog.error(0x0000, 'DynamicComponentDemo', 'onError: ' + this.errorMessage);
        })
        .borderWidth(10)
        .borderColor(Color.Red)
    }
    .height('100%')
    .width('100%')
  }
}
  • 以下为用于运行Abc的Worker线程对象的实现文件/src/main/ets/workers/Worker.ets

    import { ErrorEvent, MessageEvents, ThreadWorkerGlobalScope, worker } from '@kit.ArkTS';
    
    const workerPort: ThreadWorkerGlobalScope = worker.workerPort;
    
    workerPort.onmessage = (event: MessageEvents) => {
    };
    
    workerPort.onmessageerror = (event: MessageEvents) => {
    };
    
    workerPort.onerror = (event: ErrorEvent) => {
    };
    
  • 嵌入显示的Abc页面/src/main/ets/pages/DynamicPage.ets

    @Entry
    @Component
    struct DynamicPage {
      build() {
        Column() {
          Text('this is ability in DC')
            .fontSize(20)
            .margin(10)
        }
        .height('100%')
        .width('100%')
        .borderWidth(10)
        .borderColor(Color.Blue)
        .align(Alignment.Top)
      }
    }
    
  • 为提供方页面配置路由main_pages.json

    {
      "src": [
        "pages/Index",
        "pages/DynamicPage"
      ]
    }