HarmonyOS鸿蒙Next中XComponent是怎么与native进行关联的?
HarmonyOS鸿蒙Next中XComponent是怎么与native进行关联的? 使用xcomponent怎么在底层获取到ui层对应的实例的,如果同一个UI页面有多个xcomponent怎么处理?
有没办法从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
这里有讲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)进行交互。开发者可以通过XComponent
的surface
属性获取NativeWindow
,进而与native层进行数据传递和渲染操作。
具体流程如下:
- 在ArkUI中创建
XComponent
组件,并设置其type
为surface
。 - 通过
XComponent
的getXComponentSurfaceId
方法获取surfaceId
。 - 在native层,使用
OH_NativeWindow_CreateFromSurface
函数,传入surfaceId
创建NativeWindow
。 - 通过
NativeWindow
进行图形渲染或数据交换,例如使用OpenGL或Vulkan进行绘制。
这种机制实现了ArkUI与native层的高效通信,适用于需要高性能图形渲染的场景。
在HarmonyOS鸿蒙Next中,XComponent通过XComponentController
与Native层进行关联。开发者需要在Native层实现XComponentController
接口,并通过XComponent
的setController
方法将其绑定。Native层通过XComponentController
的回调方法(如onSurfaceCreated
、onSurfaceChanged
等)与XComponent
进行交互,从而实现对图形渲染、事件处理等功能的控制。这种机制使得开发者可以在Native层高效地管理和操作XComponent
的渲染表面。