HarmonyOS 从C++层触发通知到ArkTS层?

实现了自研的har包,底层使用C++实现,上层也有ArkTS的实现。

当C触发arkTs的方法时,需要在C层缓存了napi\_env,,然后通过异步任务 napi\_create\_async\_work,napi\_queue\_async\_work 将C的事件放到arkTs的线程中执行。同时C缓存了上层设置的回调对象,在异步任务的线程中,通过napi\_get\_named\_property,napi\_call\_function 执行arkTs的方法。实现方法和这篇文章类似: https://blog.csdn.net/licui1000/article/details/134729566

Q:

  1. 上面的方法是否可行?
  2. C++层缓存的 napi\_env 有可能失效吗,会进一步导致崩溃吗?
阅读 571
1 个回答

解决方案

1.上面方法可行。

2.不会:因存储的是主线的env。备注:主线程的env,存储起来,没有问题,也能够在后续的调用中使用,但是,不能跨线程使用,跨线程使用会崩溃。其他线程的env不要缓存,如taskpool创建的线程在线程运行结束后,就会销毁,此时,存储的env不能再使用,使用会崩溃。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进