HarmonyOS 鸿蒙Next napi C++方法调用TS层方法的最佳实践

发布于 1周前 作者 sinazl 来自 鸿蒙OS

HarmonyOS 鸿蒙Next napi C++方法调用TS层方法的最佳实践 逻辑在c++层,需求发起网络请求,但网络请求的逻辑需要在TS层实现,那么就需要从c++层发起,触发TS层的网络请求逻辑,然后,在网络请求完成后,再把response再传回c++层。

看到napi的资料中,详细描述了TS代码如何调用c++代码,包括同步、异步方式。但对于反方向的调用,c++代码调用TS代码的方式介绍较少。

目前看到有两种可能的方式,1、是截图中的在globalThis上添加TS代码,在c++用napi_get_global的方式获取,进而调用其方法,但ets代码似乎获取不了globalThis。2、是通过TS层调用c++代码,参数是callback的形式。

不知道是否还有别的方法,哪种才是最佳实践,官方推荐的


更多关于HarmonyOS 鸿蒙Next napi C++方法调用TS层方法的最佳实践的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

业界常用 “注册—回调”的方式处理这类业务逻辑,这也是一种非常好的实践方式,这类业务特别是多同事处理不同模块间交互的情况,也类似于业界中一些其他常用处理方式,如SIP协议的“订阅-通知”,redis的“订阅-通知”。 这种做法的好处有:

  1. 模块间独立,耦合性低,非常方便维护、调式。

  2. 业务处理灵活,特别涉及到异步处理时,对状态机的运用非常方便于业务扩展,以及高并发业务处理。

  3. 多进程、多线程间通讯处理只在各模块接口中。

等等 这里说的,就是IR单中提到的“callback的形式”形式的运用,也建议使用这种方式。 应用运行起来时,可以将一些需要回调的函数传递到C++层(注册方式,可以注册多个回调函数,也可以注册一个回调,也可以根据返回的类型作回调函数体中不同业务的分发逻辑等等),C++层作业务处理(可能涉及到不同的线程间交互处理)完毕后,根据需要选择将一些信息返回给ArkTS层(通过在JS主线程中处理注册的回调函数)处理。

更多关于HarmonyOS 鸿蒙Next napi C++方法调用TS层方法的最佳实践的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)系统中,当你需要在napi(Native API)层调用TS(TypeScript)层的方法时,最佳实践通常涉及以下几个步骤:

  1. 接口定义: 在TS层定义你需要被调用的方法,并确保这些方法可以通过某种机制(如全局对象或模块导出)被napi层访问。由于napi层是C++编写的,你需要确保TS层的方法能够以一种兼容C++调用的方式暴露出来。

  2. JSBridge实现: 实现一个JSBridge,用于在napi层和TS层之间传递消息。这个Bridge可以是一个封装好的模块,它提供了从C++到JavaScript的调用接口,以及从JavaScript回调C++的功能。

  3. 调用与回调: 在napi层,通过JSBridge调用TS层的方法。确保调用过程中参数和返回值的类型匹配,并处理可能的异常或错误情况。同时,如果需要从TS层回调napi层的方法,也需要在JSBridge中实现相应的机制。

  4. 性能与安全: 考虑到性能和安全性,确保JSBridge的实现是高效的,并且能防止潜在的脚本注入攻击。

  5. 测试与验证: 编写测试用例,验证napi层到TS层的调用是否按预期工作,包括正常情况和异常情况的处理。

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部