HarmonyOS native 中执行长耗时任务收到中断信号,导致函数异常终止
操作步骤:
1、按照这个文档开发native模块:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/use-napi-asynchronous-task-V5
2、ExecuteCB中执行我们的业务逻辑 dowork()
-
ArtTS中调用对应的接口
-
ExecuteCB执行到dowork,当dowork执行到1秒时,执行被中断并伴随log:
05-29 18:34:19.458 3399-3417 C01719/ffrt com.examp...lication W [nodict]349:RecordSymbolAndBacktrace:114 Function occupies worker for more than 1s.
从log中看,worker是基于ffrt实现的,看了开源的
https://gitee.com/openharmony/resourceschedule_ffrt
是ffrt的长耗时任务监测触发的抓栈信号。
https://gitee.com/openharmony/resourceschedule_ffrt/blob/master/docs/user_guide.md
中,提到的sleep被中断唤醒的处理方式不适用于我们的场景:在dowork()函数中,包含与服务器交互逻辑,当收到中断时,与服务器连接状态都被重置,无法从断点恢复。
我们的需求:
能提供一个运行长耗时native任务的机制,且在执行过程中不被中断。
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
#鸿蒙通关秘籍#如何在鸿蒙API 13中实现独立执行的耗时任务?
207浏览 • 1回复 待解决
#鸿蒙通关秘籍#在鸿蒙API 13中如何使用TaskPool同时执行多个耗时任务?
186浏览 • 1回复 待解决
HarmonyOS 主线程耗时任务,app闪退
142浏览 • 1回复 待解决
HarmonyOS 耗时任务能否在退出页面时自动cancel?
83浏览 • 1回复 待解决
HarmonyOS 长时任务执行几秒后,自动关闭
570浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何通过Worker实现鸿蒙应用中的长耗时任务?
211浏览 • 1回复 待解决
如何在TaskPool和Woker里执行延时任务、周期任务
497浏览 • 1回复 待解决
Taskpool耗时任务-3分钟如何预知?任务被回收后怎么处理?
859浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何取消正在执行的短时任务?
155浏览 • 1回复 待解决
HarmonyOS 延时任务
132浏览 • 1回复 待解决
代码中做阻塞式的耗时操作,会影响其它任务的执行吗
1040浏览 • 1回复 待解决
linux中crontab的定时任务总是不自动执行怎么回事啊?
2576浏览 • 1回复 待解决
后台任务中的长时任务如何申请多个任务
2076浏览 • 1回复 待解决
HarmonyOS 后台短时任务,执行一半,程序检测到时间可能不够用,能切换为长时任务继续执行吗
146浏览 • 1回复 待解决
HarmonyOS native中svg解码异常
516浏览 • 1回复 待解决
HarmonyOS 有没有api可以执行定时任务,比如每天几点钟执行一段代码
175浏览 • 1回复 待解决
HarmonyOS (react-native)promise.reject抛出异常对象只能接收到message参数
203浏览 • 1回复 待解决
HarmonyOS 长时任务(location任务类型失败,返回9800005)
130浏览 • 1回复 待解决
"NAPI通信耗时长"导致丢帧分析
859浏览 • 1回复 待解决
页面aboutToAppear方法执行时,执行Promise任务查询请求服务器,如果耗时过长,里面的内容还会执行吗
2046浏览 • 1回复 待解决
如何查询后台任务中短时任务/长时任务/延迟任务/后台代理提醒相关的系统日志
2167浏览 • 1回复 待解决
后台长时任务启动失败
2322浏览 • 1回复 待解决
HarmonyOS UIExtensionAbility中通过RPC调用拉起一个ServiceExtAbility的接口,在退出UIExtensionAbility界面后,ServiceExtAbility.....进程里执行的任务会被直接终止嘛?
54浏览 • 1回复 待解决
如何申请多个长时任务
2097浏览 • 1回复 待解决
建议将这部分逻辑修改如下:
1.将与服务器交互逻辑在一个专门线程中处理。
2.业务逻辑处理完毕后,在通过线程安全函数将响应的信息返回给ArkTS层。
如下DEMO模拟了该过程,请根据项目实际情况,作相应修改:
index.d.ts文件:
napi_init.cpp文件:
CMakeLists.txt文件: