HarmonyOS鸿蒙Next中XComponent是怎么与native进行关联的?

HarmonyOS鸿蒙Next中XComponent是怎么与native进行关联的? 使用xcomponent怎么在底层获取到ui层对应的实例的,如果同一个UI页面有多个xcomponent怎么处理?

6 回复

有没办法从surfaceid,拿到native xcomponent的对象? 创建xcomponent的时候就要同时绑定so,才能从native拿到,感觉挺奇怪

更多关于HarmonyOS鸿蒙Next中XComponent是怎么与native进行关联的?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


这个设计还挺奇怪的,每次创建一个 xcomponent 都发触发一次 nm_register_func 函数,nm_register_func 理论上应该是 so 初始化加载执行的函数,只执行一次

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:BV1S4411E7LY/?p=17

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V2/native-window-guidelines-0000001493584172-V2

这里有讲napi中获取xcomponent对象的方法

我自己测试结果来看,一个xcomponent对象,会触发一次napi_module的nm_register_fun指定的函数

xcomponent对象可以在nm_register_fun指定的函数中获取,区分对象可以使用id来区分

ets页面中的xcomponent的id字段,可以在napi中,通过OH_NativeXComponent_GetXComponentId来获取

在HarmonyOS鸿蒙Next中,XComponent与native的关联主要通过XComponent组件和NativeWindow实现。XComponent是鸿蒙提供的一个用于渲染的组件,支持与底层图形库(如OpenGL、Vulkan)进行交互。开发者可以通过XComponentsurface属性获取NativeWindow,进而与native层进行数据传递和渲染操作。

具体流程如下:

  1. 在ArkUI中创建XComponent组件,并设置其typesurface
  2. 通过XComponentgetXComponentSurfaceId方法获取surfaceId
  3. 在native层,使用OH_NativeWindow_CreateFromSurface函数,传入surfaceId创建NativeWindow
  4. 通过NativeWindow进行图形渲染或数据交换,例如使用OpenGL或Vulkan进行绘制。

这种机制实现了ArkUI与native层的高效通信,适用于需要高性能图形渲染的场景。

在HarmonyOS鸿蒙Next中,XComponent通过XComponentController与Native层进行关联。开发者需要在Native层实现XComponentController接口,并通过XComponentsetController方法将其绑定。Native层通过XComponentController的回调方法(如onSurfaceCreatedonSurfaceChanged等)与XComponent进行交互,从而实现对图形渲染、事件处理等功能的控制。这种机制使得开发者可以在Native层高效地管理和操作XComponent的渲染表面。

回到顶部