napi_create_external_arraybuffer的finalize_cb没有调用

我使用napi_create_external_arraybuffer生成js的arraybuffer给ArkTS层调用,但是ArkTS处理完后,过了很久也没触发finalize_cb

HarmonyOS
7天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

请参考GC机制:https://blog.csdn.net/HarmonyOSDev/article/details/125886382是否触发,可以将缓冲区修改打点,如下DEMO片段参考:

static void TestFinalizeCall(napi_env env, void* finalize_data, void* finalize_hint)
{
  OH_LOG_INFO(LOG_APP, "enter TestNFinalizeCall, adddr:%{public}ld", finalize_hint);
  unsigned char *handle = (unsigned char *)finalize_hint;
  delete handle;
}

static napi_value ApplyExternal(napi_env env, napi_callback_info info)
{
  OH_LOG_INFO(LOG_APP, "enter ApplyExternal");

  unsigned char *handle = new unsigned char[4098];
  napi_value result;
  for (unsigned int i = 0; i < 4098; i++) {
  handle[i] = i;
}
  OH_LOG_INFO(LOG_APP, "enter ApplyExternal, handle adddr:%{public}ld", (int64_t)handle);

  if (napi_ok != napi_create_external_arraybuffer(env, (void*)handle, 4098, TestFinalizeCall, (void*)handle, &result)) {
  return nullptr;
}
  OH_LOG_INFO(LOG_APP, "end ApplyExternal");
  return result;
}

ArkTS侧代码:

.onClick(() => {
  for (let i = 0; i < 1000; i++)
  {
    this.handle = testNapi.applyExternal()
  }
})

在ArkTS层多循环执行,多几点几次,就会执行到TestFinalizeCall函数。napi_create_external_arraybuffer函数,分配一个附加有外部数据的js的ArrayBuffer,ts与native C++都是指向同一个缓冲区。

分享
微博
QQ
微信
回复
6天前
相关问题
HarmonyOS Napi Arraybuffer无法创建
104浏览 • 1回复 待解决
undefined symbol napi_create_threadsafe_function
4594浏览 • 1回复 待解决
Native如何通过napi获取ArrayBuffer
3837浏览 • 1回复 待解决
NAPI创建arraybuffer内存释放问题咨询
91浏览 • 1回复 待解决
napi返回ArrayBuffer有长度但是内容都是0
1219浏览 • 1回复 待解决
HarmonyOS NAPI调用ArkTS静态方法
660浏览 • 1回复 待解决
HarmonyOS NAPI调用HAR模块失败
614浏览 • 1回复 待解决
NAPI跨线程调用TS线程函数
1384浏览 • 1回复 待解决
没有napi一些demo?
438浏览 • 3回复 待解决
HarmonyOS调用napi_call_function方法时崩溃
752浏览 • 1回复 待解决