整个跨语言交互开发流程中,各部分(创建工程、Native侧、ArkTS侧)是如何协同工作以实现功能的?

阅读 510
avatarAI BotBETA

在整个跨语言交互开发流程中,各部分(创建工程、Native侧、ArkTS侧)协同工作以实现功能的流程如下:

创建工程

  • 使用DevEco Studio创建新项目,选择Native C++模板,并设置API版本和工程名称。
  • 创建后的工程结构通常包括cpp部分和ets部分,分别用于Native侧和ArkTS侧的开发。

Native侧

  • 在.cpp文件中实现模块的注册。需要提供注册lib库的名称,并在注册回调方法中定义接口的映射关系,即Native方法及对应的JS/ArkTS接口名称。
  • 实现具体的Native方法,这些方法将被ArkTS侧调用。
  • 使用子线程执行耗时任务(如模拟下载),避免阻塞主线程。通过napi_call_threadsafe_function或napi_call_function等API将进度信息或其他结果实时传递给ArkTS侧。

ArkTS侧

  • 在ArkTS代码中import对应的so库,即可调用Native侧实现的方法。
  • 定义与Native侧接口对应的ArkTS接口,并在需要时调用这些接口。
  • 通过回调函数接收Native侧传递的信息,并更新UI或执行其他逻辑。

协同工作流程

  1. 初始化

    • 在应用启动时,ArkTS侧会加载并初始化Native模块。这通常涉及调用napi_module_register方法将模块注册到系统中,并调用模块初始化函数。
  2. 方法调用

    • 当ArkTS侧需要调用Native侧的方法时,它会使用已定义的接口名称调用该方法。
    • Native侧接收到调用请求后,执行相应的方法逻辑。
  3. 数据传递

    • Native侧可以通过napi_create_*系列API创建JavaScript值,并使用napi_call_function等API将这些值传递给ArkTS侧。
    • ArkTS侧接收到这些值后,可以更新UI或执行其他逻辑。
  4. 回调处理

    • 如果Native侧需要向ArkTS侧传递进度信息或其他异步结果,它可以使用napi_create_threadsafe_function创建一个线程安全的函数,并在子线程中调用该函数。
    • ArkTS侧会接收到这个回调,并更新UI或执行其他逻辑来处理这些信息。
  5. 资源清理

    • 当应用关闭或模块不再需要时,应清理Native模块占用的资源。这通常涉及释放内存、关闭文件句柄等操作。

通过以上步骤,各部分协同工作以实现跨语言交互功能。这种机制使得开发者能够在ArkTS侧使用JavaScript或TypeScript等语言编写用户界面和业务逻辑,同时利用Native侧的高性能计算能力或访问底层系统资源。

1 个回答

创建工程为整个开发提供基础环境和项目结构框架。Native侧通过设置模块注册信息、初始化模块、实现接口等操作,构建起C/C++层面的功能模块,并将其注册到系统中,使其能够被ArkTS侧调用。ArkTS侧则通过import引入Native侧的so库,在相应的业务逻辑(如按钮点击事件等)中调用Native侧的方法,从而实现跨语言交互。例如,创建工程后,Native侧实现了加法运算和回调功能的接口,ArkTS侧在界面按钮点击时调用这些接口,完成数据计算和交互操作,各部分紧密配合实现完整的跨语言交互功能。

本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进