#鸿蒙通关秘籍#鸿蒙开发中如何避免线程间数据传递引发的内存泄漏?

HarmonyOS
2024-12-11 14:29:00
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
UDP梦幻使者

在鸿蒙开发中,线程间传递数据时,常见的问题是内存泄漏。这可以通过正确的引用计数管理来解决。需要利用 napi 提供的 napi_create_referencenapi_delete_reference 方法管理 JavaScript 对象的生命周期。

c++ void ExecuteWorkTask(uv_work_t *req) { // 在子线程中执行一些耗时任务 }

void WorkCompleteCallback(uv_work_t *req, int status) { // 在主线程执行结束任务后调用 CallbackContext *context = (CallbackContext *)req->data; napi_value callback, argv, result; napi_get_reference_value(context->env, context->callbackRef, &callback); napi_create_int32(context->env, context->retData, &argv); napi_call_function(context->env, nullptr, callback, 1, &argv, &result);

// 删除创建的引用以避免内存泄漏
napi_delete_reference(context->env, context->callbackRef);
delete context;

}

napi_value AddThreadTask(napi_env env, napi_callback_info info) { napi_value js_cb; napi_get_cb_info(env, info, &js_cb, nullptr, nullptr);

auto context = new CallbackContext();
uv_work_t *workReq = new uv_work_t;
workReq->data = context;

napi_create_reference(env, js_cb, 1, &context->callbackRef);
uv_queue_work(context->loop, workReq, ExecuteWorkTask, WorkCompleteCallback);

return nullptr;

}

通过这种方法能够确保在任务完成后,删除不再需要的引用,从而有效防止内存泄漏问题。

分享
微博
QQ
微信
回复
2024-12-11 15:25:25
相关问题
HarmonyOS worker间数据传递
213浏览 • 1回复 待解决