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 8767b7cc36707c0cd92c65f40fd3dbc894159dfc..00b683114005f58690e867c67f06eb8f3c5aa58f 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 b100657ca89adc5c58a75b10fc89833b08c0a076..67c9d5f7d18d5f8e8318e7d94f0d97116c55757d 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 5f5bcd4a253fee232807d7120ac1b45f58ed67d3..c0e86ccdd30a55cba7d83adf5d7125d4ef533fa8 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