HarmonyOS 鸿蒙Next napi callback是否会失效或被提前销毁
HarmonyOS 鸿蒙Next napi callback是否会失效或被提前销毁 用cpp写的消息通道,在ts 设置回调
cli.initEnv((msg: string) => {
hilog.info(0x0000, 'testTag', 'callback=%{public}s', msg);
})
在cpp 层通过 napi_ref 保存回调函数
由于cpp 程序在线程中存在,需跟随应用生命周期,保存的回调函数是否可能会被销毁掉?
-
napi_ref由您这边自行管理,需要手动delete。
-
napi的使用标准: https://nodejs.org/docs/latest-v8.x/api/n-api.html
-
这边给您提供相关napi的优秀实践,以供参考: https://gitee.com/openharmony-sig/ohos_ijkplayer
-
关于ets与cpp解耦做法:将 type 文件转移至 ets 中,修改模块级 oh-package.json5 依赖路径file:./src/main/cpp/types/libhello -> file:./src/main/ets/types/libhello 即可
-
鸿蒙 import ‘*.so’ 相当于Java中的system.load()he System.loadLibray()
更多关于HarmonyOS 鸿蒙Next napi callback是否会失效或被提前销毁的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,napi
(Node-API)的callback
是否会失效或被提前销毁,主要取决于callback
的生命周期管理。napi
是用于在C/C++模块中与JavaScript进行交互的API,callback
是JavaScript函数在C/C++中的表示。
napi
的callback
在以下情况下可能会失效或被提前销毁:
-
JavaScript对象被垃圾回收:如果
callback
对应的JavaScript对象被垃圾回收机制回收,callback
将失效。napi
提供了napi_create_reference
和napi_delete_reference
等API,用于管理JavaScript对象的引用,防止其被提前垃圾回收。 -
作用域结束:如果
callback
是在某个作用域内创建的,当该作用域结束时,callback
可能会失效。为避免这种情况,可以使用napi_create_reference
将callback
的引用存储在全局或更长的生命周期中。 -
异步操作中的
callback
:在异步操作中,如果callback
被调用前其对应的JavaScript对象被销毁,callback
将失效。使用napi_create_reference
和napi_get_reference_value
可以确保callback
在异步操作中仍然有效。 -
线程安全:在多线程环境中,如果
callback
被多个线程共享且未正确管理,可能会导致callback
失效或提前销毁。使用napi_threadsafe_function
可以确保callback
在多线程环境中的正确使用。
总之,napi
的callback
是否会失效或被提前销毁,取决于其生命周期管理。通过合理使用napi
提供的引用管理和线程安全机制,可以有效避免callback
失效或被提前销毁的问题。