往期知识点整理
- 鸿蒙(HarmonyOS)北向开发知识点记录~
- 【鸿蒙实战开发】Fabric 自定义组件开发指南
- 【鸿蒙实战开发】使用Snapshot Insight分析ArkTS内存问题
- 【鸿蒙实战开发】C++子线程与UI主线程通信方案
- 持续更新中……
异步流程介绍
ArkTS是单线程的,其通过事件循环机制来处理异步任务,这一特性,同样也深入影响了Node-API的模块开发。在Native线程中既要保证没有多线程问题,又要保证任务的正确执行。
基于threadsafe的实现
方案概述
针对在HarmonyOS中,Native子线程不能直接访问ArkTS主线程的资源的场景,Node-API提供了napi_threadsafe_function这一套线程安全函数接口,用来实现异步通信操作。下面介绍napi_threadsafe_function的方式。
实现流程
应用侧传入需要执行的异步任务。
Native侧通过napi_create_threadsafe_function创建线程安全函数,将callback注册到线程安全函数中,等待后续其他线程抛异步任务进行回调。
通过napi_create_async_work,将ExecuteWork与WorkComplete添加为异步任务的执行回调与完成回调。
通过ExecuteWork函数进行业务处理,并执行线程安全函数,通过WorkComplete函数进行任务执行完成后的资源清理回收工作。
通过注册给线程安全函数的callback回到主线程,然后通过napi_call_function调用ArkTS函数回到ArkTS侧。