HarmonyOS 鸿蒙Next native层的nm_register_func函数会被多次调用
HarmonyOS 鸿蒙Next native层的nm_register_func函数会被多次调用
咨询场景描述:
1 创建有native代码的工程;
2 在EntryAblity.ets使用import加载native so,比如 Import testNapi from ‘libentry.so’,然后在代码中使用native中的函数,比如在onWindowStageCreate中调用native函数,此时调用成功,可以看到nm_register_func对应的函数有被调用到;
3 在pages/Index.ets中加载XComponent组件,此时又出现了调用nm_register_func函数的情况;
4 此后,如果在pages/Index.ets中继续加载XComponent组件,每加载一次就会调用一次nm_register_func函数;
疑问点:native模块正常会被初始化几次?在什么时候会被释放掉?初始化的正式时机是什么?
更多关于HarmonyOS 鸿蒙Next native层的nm_register_func函数会被多次调用的实战教程也可以访问 https://www.itying.com/category-93-b0.html
加载机制请参考下面的这个文档:
1 再次init的时候,前一次init创建的变量会被销毁吗;
--- env变量是全局的,不会销毁。C/C++基本的数据类型局部变量、全局变量等,按照C/C++的语法处理的,如局部变量,出了init,栈就会回收,会被销毁,
2 再一次init的时候,还是需要完整初始化一次吗,如果要,那怎么保存上下文信息呢?如果不要,那和上一次的关系是怎样的呢,有什么信息会被重置吗?
---- 进入init一次,就是函数执行一次,这个上下文信息指的是啥?是你自己定义的信息吗?这个就按照正常的逻辑处理就行了,可以再上下文信息上定义一个标志位,第一次执行,正常保存,置标志位,下次根据标志位的结果,来判断是否保存,这个业务逻辑来区分处理即可。
更多关于HarmonyOS 鸿蒙Next native层的nm_register_func函数会被多次调用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙系统中,nm_register_func
函数在native层被设计为注册某种功能或回调接口。如果该函数被多次调用,通常是因为在系统的不同模块或组件初始化过程中,有多个路径或条件触发了注册逻辑。
HarmonyOS的模块化设计允许不同服务或组件独立运行和加载,这可能导致在系统启动或运行时,某些功能或回调需要被多次注册以确保所有相关模块都能正确接收和处理事件。然而,多次调用nm_register_func
并不总是预期的行为,它可能引发资源浪费、重复处理或潜在冲突。
为了处理这种情况,开发者应当检查:
- 是否有必要在多个位置注册同一功能;
- 是否存在代码逻辑错误导致重复注册;
- 是否有机制确保同一功能只注册一次(如使用静态变量或互斥锁)。
此外,确认nm_register_func
的实现是否包含防止重复注册的机制,比如检查已注册的函数指针是否相同。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。