From 127aabd84a1bef5c617884abc2ffee6d3bcc04d6 Mon Sep 17 00:00:00 2001 From: wangyang2022 Date: Fri, 4 Jul 2025 06:18:24 +0000 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9EC-API=20=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E5=B9=B6=E8=A1=8C=E5=8C=96=E7=9B=B8=E5=85=B3?= =?UTF-8?q?API=20Signed-off-by:=20wangyang2022=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ace_engine/native/native_interface.h | 5 +++ .../arkui/ace_engine/native/native_node.h | 44 +++++++++++++++++++ .../arkui/ace_engine/native/native_type.h | 5 +++ 3 files changed, 54 insertions(+) diff --git a/zh-cn/native_sdk/arkui/ace_engine/native/native_interface.h b/zh-cn/native_sdk/arkui/ace_engine/native/native_interface.h index 8767b7cc..00b68311 100644 --- a/zh-cn/native_sdk/arkui/ace_engine/native/native_interface.h +++ b/zh-cn/native_sdk/arkui/ace_engine/native/native_interface.h @@ -57,6 +57,11 @@ typedef enum { ARKUI_NATIVE_GESTURE, /** 动画相关接口类型。详见中的结构体类型定义。*/ ARKUI_NATIVE_ANIMATE, + /** + * 多线程UI组件相关接口类型, 详见中的结构体类型定义。 + * @since 20 + */ + ARKUI_MULTI_THREAD_NATIVE_NODE, } ArkUI_NativeAPIVariantKind; /** diff --git a/zh-cn/native_sdk/arkui/ace_engine/native/native_node.h b/zh-cn/native_sdk/arkui/ace_engine/native/native_node.h index b100657c..67c9d5f7 100644 --- a/zh-cn/native_sdk/arkui/ace_engine/native/native_node.h +++ b/zh-cn/native_sdk/arkui/ace_engine/native/native_node.h @@ -9064,6 +9064,50 @@ ArkUI_ErrorCode OH_ArkUI_RemoveSupportedUIStates(ArkUI_NodeHandle node, int32_t */ int32_t OH_ArkUI_RunTaskInScope(ArkUI_ContextHandle uiContext, void* userData, void(*callback)(void* userData)); +/** + * @brief 将UI任务抛到框架提供的非UI线程中执行。 + * 适用于UI组件创建并行化场景,开发者可以使用此接口在非UI线程创建UI组件,创建完成后回到UI线程将其挂载到UI树上。 + * + * @param context UI实例对象指针。 + * @param asyncUITaskData 开发者自定义数据指针,作为asyncUITask和onFinish的入参。 + * @param asyncUITask 在非UI线程执行的函数。 + * @param onFinish asyncUITask执行完成后,在UI线程执行的函数。 + * @return 错误码。 + * {@link ARKUI_ERROR_CODE_NO_ERROR} 成功。 + * {@link ARKUI_ERROR_CODE_PARAM_INVALID} uiContext对象无效或asyncUITask为空指针。 + * @since 20 + */ +int32_t OH_ArkUI_PostAsyncUITask(ArkUI_ContextHandle context, void* asyncUITaskData, + void (*asyncUITask)(void* asyncUITaskData), void (*onFinish)(void* asyncUITaskData)); + +/** + * @brief 将UI任务抛到UI线程中执行。 + * 适用于UI组件创建并行化场景,当开发者需要在自己维护的非UI线程中创建UI组件,使用此接口在UI线程将非UI线程创建的组件挂载到UI树上。 + * + * @param context UI实例对象指针。 + * @param taskData 开发者自定义数据指针,作为task的入参。 + * @param task 在UI线程执行的函数。 + * @return 错误码。 + * {@link ARKUI_ERROR_CODE_NO_ERROR} 成功。 + * {@link ARKUI_ERROR_CODE_PARAM_INVALID} uiContext对象无效或task为空指针。 + * @since 20 + */ +int32_t OH_ArkUI_PostUITask(ArkUI_ContextHandle context, void* taskData, void (*task)(void* taskData)); + +/** + * @brief 将UI任务抛到UI线程中执行,调用此接口的线程阻塞等待UI线程中的UI任务执行完成。 + * 适用于UI组件创建并行化场景,当开发者在非UI线程创建组件的过程中需要执行只支持UI线程的业务逻辑时,使用此接口回到UI线程执行业务逻辑,业务完成后继续在非UI线程创建组件。 + * 可能导致非UI线程长时间阻塞,不建议频繁使用。 + * + * @param context UI实例对象指针。 + * @param taskData 开发者自定义数据指针,作为task的入参。 + * @param task 在UI线程执行的函数。 + * @return 错误码。 + * Returns {@link ARKUI_ERROR_CODE_NO_ERROR} 成功。 + * Returns {@link ARKUI_ERROR_CODE_PARAM_INVALID} uiContext对象无效或task为空指针。 + * @since 20 + */ +int32_t OH_ArkUI_PostUITaskAndWait(ArkUI_ContextHandle context, void* taskData, void (*task)(void* taskData)); #ifdef __cplusplus }; #endif diff --git a/zh-cn/native_sdk/arkui/ace_engine/native/native_type.h b/zh-cn/native_sdk/arkui/ace_engine/native/native_type.h index 5f5bcd4a..c0e86ccd 100644 --- a/zh-cn/native_sdk/arkui/ace_engine/native/native_type.h +++ b/zh-cn/native_sdk/arkui/ace_engine/native/native_type.h @@ -2204,6 +2204,11 @@ typedef enum { * @since 16 */ ARKUI_ERROR_CODE_NODE_NOT_ON_MAIN_TREE = 106203, + /** + * @error 此节点未在合法的线程上操作。 + * @since 20 + */ + ARKUI_ERROR_CODE_NODE_ON_INVALID_THREAD = 106204, /** * @error 当前节点无法获得焦点。错误码的详细介绍请参见[焦点错误码](../apis-arkui/errorcode-focus.md#150001-节点无法获得焦点)。 * @since 15 -- Gitee