harmony 鸿蒙在NDK中保证多实例场景功能正常

  • 2025-06-16
  • 浏览 (3)

在NDK中保证多实例场景功能正常

从API version 20开始,ArkUI开发框架提供了Native侧嵌入跨实例相关能力OH_ArkUI_RunTaskInScope

在NDK多窗口开发时,可能会涉及到组件的跨实例设置属性等场景,使用该能力可确保在调用跨实例组件设置属性时的上下文正确性,避免跨实例接口调用失败。

说明: - 使用OH_ArkUI_RunTaskInScope接口在B页面设置A页面内的组件,或由A页面创建但未上树的组件的属性或逻辑,保证回调范围内执行的逻辑实例正确性。

  • OH_ArkUI_RunTaskInScope的userData入参为自定义属性类型,开发者可根据业务实际需要,传入任意类型的数据或结构体。

本示例展示OH_ArkUI_RunTaskInScope接口的基础使用方式,OH_ArkUI_NodeUtils_GetAttachedNodeHandleById用于获取前置实例页面内的组件,相关使用请参考OH_ArkUI_NodeUtils_GetAttachedNodeHandleById,此处userData传入的数据类型为最终要设置的组件指针,便于设置对应组件属性。

//page1
ArkUI_NodeHandle button = nodeAPI->createNode(ARKUI_NODE_BUTTON);
ArkUI_AttributeItem LABEL_Item = {.string = "pageOneButton"};
//设置id,用于在第二个页面内通过接口查找
ArkUI_AttributeItem id = {.string = "pageOneButton"};
nodeAPI->setAttribute(button, NODE_ID, &id);
nodeAPI->setAttribute(button, NODE_BUTTON_LABEL, &LABEL_Item);
//page2
//pageOneButton由前置页面创建,通过OH_ArkUI_NodeUtils_GetAttachedNodeHandleById在第二个页面获取。
ArkUI_NodeHandle pageOneButton = nullptr;
auto ec = OH_ArkUI_NodeUtils_GetAttachedNodeHandleById("pageOneButton", &pageOneButton);
auto uiContext = OH_ArkUI_GetContextByNode(pageOneButton);
OH_ArkUI_RunTaskInScope(uiContext, pageOneButton, [](void *userData) {
        auto pageOneButton = (ArkUI_NodeHandle)userData;
        ArkUI_NumberValue value[] = {480};
        ArkUI_AttributeItem LABEL_Item = {.string = "success"};
        value[0].f32 = 250;
        ArkUI_AttributeItem button_Item = {value, sizeof(value) / sizeof(ArkUI_NumberValue)};
        nodeAPI->setAttribute(pageOneButton, NODE_BUTTON_LABEL, &LABEL_Item);
        nodeAPI->setAttribute(pageOneButton, NODE_WIDTH, &button_Item);
    }
);

你可能感兴趣的鸿蒙文章

harmony 鸿蒙ArkUI(方舟UI框架)

harmony 鸿蒙全屏启动原子化服务组件(FullScreenLaunchComponent)

harmony 鸿蒙弧形按钮 (ArcButton)

harmony 鸿蒙动画衔接

harmony 鸿蒙动画概述

harmony 鸿蒙帧动画(ohos.animator)

harmony 鸿蒙实现属性动画

harmony 鸿蒙属性动画概述

harmony 鸿蒙弹出框概述

harmony 鸿蒙模糊

0  赞