HarmonyOS鸿蒙Next中关于@Reusable的复用范围,缓存池的大小问题,@Reusable标记的组件,为什么builder不支持
HarmonyOS鸿蒙Next中关于@Reusable的复用范围,缓存池的大小问题,@Reusable标记的组件,为什么builder不支持
-
@Reusable的复用范围,什么情况可以复用:
- 列表滚动(本例中的场景):当应用需要展示大量数据的列表,并且用户进行滚动操作时,频繁创建和销毁列表项的视图可能导致卡顿和性能问题。在这种情况下,使用列表组件的组件复用机制可以重用已经创建的列表项视图,提高滚动的流畅度。
- 动态布局更新:如果应用中的界面需要频繁地进行布局更新,例如根据用户的操作或数据变化动态改变视图结构和样式,重复创建和销毁视图可能导致频繁的布局计算,影响帧率。在这种情况下,使用组件复用可以避免不必要的视图创建和布局计算,提高性能。
- 地图渲染:在地图渲染这种场景下,频繁创建和销毁数据项的视图可能导致性能问题。使用组件复用可以重用已创建的视图,只更新数据的内容,减少视图的创建和销毁,能有效提高性能。
HarmonyOS应用框架提供了组件复用能力:可复用组件从组件树上移除时,会进入到一个回收缓存区,后续创建新组件节点时,会复用缓存区中的节点,节约组件重新创建的时间。 与懒加载,缓存列表项复用
列表滑动等场景时,组件复用能力推荐搭配LazyForEach懒加载与缓存列表项共同使用以达到性能最优效果。
说明
搭配LazyForEach懒加载时,只有直接写在LazyForEach内的组件,复用才能生效。例如LazyForEach懒加载里面直接写的是父组件A,父组件A包含有@Reusable装饰器标识的子组件B,但此时子组件B不会实现组件复用。 参考文档:https://developer.huawei.com/consumer/cn/doc/best-practices-V14/bpta-component-reuse-scenarios-methods-V14#section57423408379
关于缓存池的大小问题,与内存增长,如何释放:
缓存池的自定义组件为可复用组件,ArkUI框架会自动调度,关键在于里面的数据如何释放, 可以使用 aboutToRecycle 参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V13/ts-custom-component-lifecycle-V13#abouttorecycle10
-
@Reusable标记的组件会生成哪些差异:
最主要的差异就是可复用,减少性能消耗,需要注意的是组件被复用后,ArkUI框架会将组件构造对应的参数输入给aboutToReuse生命周期回调,开发者需要在aboutToReuse生命周期中对需要进行更新的状态变量进行赋值,ArkUI框架将会基于最新的状态变量值对UI进行展示。 简单来说 就是这个复用组件将不会有aboutToapper生命周期,生命周期的区别。
-
为什么builder不支持:
builder函数可以在自定义组件里面使用,并且 推荐使用@Builder替代自定义组件,减少嵌套层级,利于维护且能提升页面加载速度。 参考文档:https://developer.huawei.com/consumer/cn/doc/best-practices-V14/bpta-component-reuse-V14#section109991333141413
builder不支持,因为builder本身是一个轻量的的UI元素复用机制,不可以像自定义组件承担大量的业务逻辑。
更多关于HarmonyOS鸿蒙Next中关于@Reusable的复用范围,缓存池的大小问题,@Reusable标记的组件,为什么builder不支持的实战教程也可以访问 https://www.itying.com/category-93-b0.html
关于HarmonyOS Next中@Reusable的问题,简要回答如下:
- 复用范围:
- 主要适用于列表滚动、动态布局更新和地图渲染等频繁创建销毁组件的场景
- 必须直接用于LazyForEach内的组件才生效,嵌套的子组件不会复用
- 缓存池管理:
- 框架自动管理缓存池大小
- 开发者应在aboutToRecycle中释放数据资源
- 复用组件通过aboutToReuse回调更新状态
- 差异点:
- 复用组件会跳过常规创建流程
- 使用aboutToReuse替代aboutToAppear
- 状态更新需在aboutToReuse中显式处理
- builder不支持原因:
- builder是轻量级UI复用机制
- 设计定位不同,不适合承载复杂业务逻辑
- 推荐在简单UI复用场景使用@Builder
注意复用组件的数据状态管理,确保在生命周期回调中正确处理数据初始化和释放。