一、只有首次调用会加载模块信息,触发模块注册
当ArkTS侧在import一个so库时,只有首次调用会加载模块信息,触发模块注册。当工程被多次import时,是不会多次加载的。
二、导入使用的模块名和注册时的模块名大小写需要保持一致
导入使用的模块名和注册时的模块名大小写保持一致,如模块名为entry,则so的名字为libentry.so,napi_module中nm_modname字段应为entry,ArkTS侧使用时写作:import xxx from 'libentry.so'。
三、有关线程安全的函数功能
- napi_call_threadsafe_function:调用线程安全函数。
- napi_release_threadsafe_function:指示线程安全函数将停止使用。
- napi_ref_threadsafe_function:指示在主线程上运行的事件循环在线程安全函数被销毁之前不应退出。
- napi_acquire_threadsafe_function:指示线程安全函数可以开始使用。
四、关于napi_create_async_work接口中注册的execute和complete回调
napi_create_async_work接口中注册的execute回调用于执行异步业务逻辑,代码运行在work子线程中; complete回调用于将execute回调的处理结果反馈给ArkTS应用侧,代码运行在EventLoop子线程中。
五、关于线程安全函数开发
- 在创建线程安全函数对象时,要注册绑定ArkTS应用侧传入的callback回调和线程安全回调napi_threadsafe_function_call_js
- 在Native接口实现中,会临时返回空值或者promise对象给ArkTS应用侧,以避免应用侧主线程阻塞
- C++子线程将会执行异步业务逻辑,并将处理结果写入上下文数据中。同时,调用napi_call_threadsafe_function将napi_threadsafe_function_call_js抛给EventLoop事件循环
- 在线程安全回调napi_threadsafe_function_call_js执行过程中,将会通过调用napi_call_function或者napi_resolve_deferred把异步处理结果反馈到ArkTS应用侧