HarmonyOS关于JSVM中创建原生对象的生命周期问题

目前正在试用JSVM_API。demo中向 JSVM里添加了诸多对象,但是在注入的js中调用这些对象时会说这些对象找不到。demo的伪代码大致如下:

initJsEnv(){ 
  JSVM_Value global; 
  OH_JSVM_GetGlobal(jsvm_env, &global); 
  JSVM_Value base; 
  OH_JSVM_CreateObject(jsvm_env, &base); 
  OH_JSVM_SetNamedProperty(jsvm_env, global, "__base__", base); 
} 
static char* runScript(JSVM_Env env, char *buf, size_t buf_len) { 
  OH_JSVM_RunScript(env,"typeof globale.__base__", &result); 
}

最后会报错说__base__未定义。目前怀疑是demo中提供的那个handlescope本身只能在一个方法里生效,跨方法就没法用了。你们提供的demo全部都是一个方法把所有事情都做了。而正常的项目开发,所有功能都分在不同的方法里,因此demo就缺乏参考性了。现在就想知道,该如何在js环境中添加一个全局的对象。文档地址:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/jsvm-data-types-interfaces-V5#%E5%88%9B%E5%BB%BAjs%E5%AF%B9%E8%B1%A1%E7%B1%BB%E5%9E%8B%E5%92%8C%E5%9F%BA%E6%9C%AC%E7%B1%BB%E5%9E%8B

HarmonyOS
2024-09-11 11:44:25
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
put_get

通过下面代码向global添加了__base__对象:

JSVM_Value global; 
OH_JSVM_GetGlobal(env, &global); 
JSVM_Value base; 
OH_JSVM_CreateObject(env, &base); 
OH_JSVM_SetNamedProperty(env, global, "__base__", obj);

在JS代码中可以通过 this.base

 方式获取,实际测试在OH_JSVM_CloseHandleScope后执行JS脚本也是可以获取到的。

OH_JSVM_ReferenceRef(env, result, &refCount); 
OH_LOG_INFO(LOG_APP, "===refCount: %{public}d ", refCount); 
OH_JSVM_CloseHandleScope(env, scope); 
return result; 
} 
static napi_value Add(napi_env jsEnv, napi_callback_info info) { 
  if (vm == nullptr) { 
    JSVM_InitOptions initOptions; 
    memset(&initOptions, 0, sizeof(initOptions)); 
    OH_JSVM_Init(&initOptions); 
    OH_JSVM_CreateVM(nullptr, &vm); 
    JSVM_VMScope vmScope; 
    OH_JSVM_OpenVMScope(vm, &vmScope); 
    OH_JSVM_CreateEnv(vm, 0, nullptr, &env); 
  } 
  JSVM_EnvScope envScope; 
  OH_JSVM_OpenEnvScope(env, &envScope); 
  std::string input = "aaa"; 
  JSVM_Ref strRef = CreateStringRef(env, input); 
  OH_LOG_INFO(LOG_APP, "aaa is %{public}s", StringFromRef(env, strRef)); 
  OH_JSVM_DestroyEnv(env); 
  napi_value sum; 
  return sum; 
}

同理,global变量是环境中的全局变量,如果对OH_JSVM_OpenHandleScope内创建的对象有引用,其对象也是不会被释放的,会随着环境的销毁释放,不会有内存泄漏的问题。

分享
微博
QQ
微信
回复
2024-09-11 15:23:01
相关问题
Dialog组件生命周期问题
232浏览 • 1回复 待解决
Window窗口生命周期问题
238浏览 • 1回复 待解决
HarmonyOS 弹框Dialog生命周期问题
429浏览 • 1回复 待解决
HarmonyOS 模块生命周期管理
132浏览 • 1回复 待解决
监听Ability生命周期
1037浏览 • 1回复 待解决
HarmonyOS App生命周期是什么?
282浏览 • 2回复 待解决
TabContent 内容生命周期
254浏览 • 1回复 待解决
应用内生命周期流转
490浏览 • 1回复 待解决
如何监听AbilitySlice生命周期
5040浏览 • 1回复 待解决
HarmonyOS 监听所有page生命周期
267浏览 • 1回复 待解决
HarmonyOS Navigation跳转组件生命周期
423浏览 • 2回复 待解决
HarmonyOS navigation主页面生命周期
276浏览 • 1回复 待解决
如何监听subwindow生命周期
289浏览 • 1回复 待解决
swiper切换监听生命周期
889浏览 • 1回复 待解决
如何监听全局Ability生命周期
265浏览 • 1回复 待解决
HarmonyOS Navigation跳转生命周期咨询
477浏览 • 1回复 待解决
HarmonyOS页面onPageShow生命周期不回调
779浏览 • 1回复 待解决