diff --git a/zh-cn/application-dev/napi/napi-faq-about-common-basic.md b/zh-cn/application-dev/napi/napi-faq-about-common-basic.md index af937204698e3b73c20b1a92a436f33e7a53035d..84317bc21b219be4db6eee5409e01bcde044b067 100644 --- a/zh-cn/application-dev/napi/napi-faq-about-common-basic.md +++ b/zh-cn/application-dev/napi/napi-faq-about-common-basic.md @@ -155,10 +155,10 @@ napi_value NapiGenericFailure(napi_env env, napi_callback_info) 拷贝是必要的,因为会涉及到string生命周期。当触发GC的时候,ArkTS对象可能会在虚拟机里面被搬移,可能搬移到其他地方,也可能直接对象被回收。如果直接返回一个类似char*的地址,对象被移动或回收后,那这个地址的指向就不再是之前的字符串了,此时再用这个地址去解引用很容易崩溃。 -## 鸿蒙多线程下napi_env的使用注意事项 +## 多线程下napi_env的使用注意事项 - 具体问题: -鸿蒙多线程下napi_env的使用注意事项是什么?是否存在napi_env切换导致的异常问题?是否必须在主线程? +多线程下napi_env的使用注意事项是什么?是否存在napi_env切换导致的异常问题?是否必须在主线程? - 注意事项: 1. napi_env和ArkTS线程是绑定的,napi_env不能跨线程使用,否则会导致稳定性问题。 @@ -311,3 +311,9 @@ void FinalizeB(napi_env env, void* data, void* hint) { } } ``` +## napi_call_threadsafe_function回调任务不执行 + +问题排查: +原因一:`napi_call_threadsafe_function`函数调用返回值不为`napi_ok`。请确认调用`napi_tsfn`相关函数的返回值是否都是`napi_ok`,若不是,请根据[错误码文档](napi_status_introduction.md)排查返回值非`napi_ok`的原因。 +原因二:env所在的ArkTS线程被阻塞。`napi_call_threadsafe_function`函数的回调将执行在env所在的ArkTS线程上,若ArkTS线程被阻塞,则线程安全函数回调不会被执行。 +原因三:线程安全函数被重复初始化的`uv_async_t`句柄影响,导致任务不执行。若某个`uv_async_t`句柄被重新初始化,第一次初始化和重复初始化范围内所创建所有`uv_async_t`句柄将无法被uv访问。线程安全函数是基于`uv_async_t`机制实现,在该特殊场景下创建线程安全函数将失效。 diff --git a/zh-cn/application-dev/napi/napi-faq-about-stability.md b/zh-cn/application-dev/napi/napi-faq-about-stability.md index 7f41aaf97854d7905e3212e20fe2388fd789de5c..d6eb797e2498603c0a89b47ca5b34e06ad2c2d98 100644 --- a/zh-cn/application-dev/napi/napi-faq-about-stability.md +++ b/zh-cn/application-dev/napi/napi-faq-about-stability.md @@ -2,7 +2,7 @@ ## 应用运行过程中出现高概率闪退怎么进行定位解决 -- 具体问题:在使用鸿蒙Node-Api(napi)开发过程中,应用运行过程中出现高概率闪退,出现cppcrash栈,栈顶为系统库libark_jsruntime.so,崩溃栈前几帧也有libace_napi.z.so,怎么进行定位解决? +- 具体问题:在使用Node-API开发过程中,应用运行过程中出现高概率闪退,出现cppcrash栈,栈顶为系统库libark_jsruntime.so,崩溃栈前几帧也有libace_napi.z.so,怎么进行定位解决? 复现概率高,每次崩溃栈略有区别,但是共性都是:崩溃栈顶是系统库的libark_jsruntime.so或者libace_napi.z.so - 崩溃信息如下: ```sh diff --git a/zh-cn/application-dev/napi/use-napi-faqs.md b/zh-cn/application-dev/napi/use-napi-faqs.md index a69370c2f2d9980c885186bc8b701a6bbf7cb4ca..427e97cae4bdbad721e16d89139425e9296687c6 100644 --- a/zh-cn/application-dev/napi/use-napi-faqs.md +++ b/zh-cn/application-dev/napi/use-napi-faqs.md @@ -22,12 +22,12 @@ 8. [【NAPI】native层调用ts层对象方法,必须传入一个function给native层吗?](napi-faq-about-common-basic.md#native层调用ts层对象方法必须传入一个function给native层吗) 9. [在c++通过pthread或std::thread创建的线程,是否能调用ets的方法并获取到结果?](napi-faq-about-common-basic.md#是否能调用ets的方法并获取到结果) 10. [当前napi的napi_get_value_string_utf8每次调用的时候都要进行拷贝,是否有nocopy、不拷贝的napi_get_value_string_utf8接口或者能力? ](napi-faq-about-common-basic.md#是否有不拷贝的napi_get_value_string_utf8接口或者能力) -11. [鸿蒙多线程下napi env的使用注意事项是什么?是否存在napi_env切换导致的异常问题?是否必须在主线程?](napi-faq-about-common-basic.md#鸿蒙多线程下napi_env的使用注意事项) +11. [多线程下napi env的使用注意事项是什么?是否存在napi_env切换导致的异常问题?是否必须在主线程?](napi-faq-about-common-basic.md#多线程下napi_env的使用注意事项) 12. [请问napi_call_threadsafe_function执行顺序是怎样的?](napi-faq-about-common-basic.md#napi_call_threadsafe_function执行顺序不符合预期) 13. [ArkTS/JS侧import xxx from libxxx.so后,使用xxx报错显示undefined/not callable或明确的Error message](napi-faq-about-common-basic.md#arkts侧报错显示undefined) 14. [接口执行结果非预期,日志显示occur exception need return](napi-faq-about-common-basic.md#接口执行结果非预期) 15. [napi_value和napi_ref的生命周期有何区别](napi-faq-about-common-basic.md#napi_value和napi_ref的生命周期有何区别) 16. [Node-API接口返回值不是napi_ok时,如何排查定位](napi-faq-about-common-basic.md#node-api接口返回值不是napi_ok时如何排查定位) 17. [napi_wrap如何保证被wrap的对象按期望顺序析构?](napi-faq-about-common-basic.md#napi_wrap如何保证被wrap的对象按期望顺序析构) - +18. [napi_call_threadsafe_function回调任务不执行](napi-faq-about-common-basic.md#napi_call_threadsafe_function回调任务不执行)