HarmonyOS鸿蒙Next中关于@Reusable的复用范围,缓存池的大小问题,@Reusable标记的组件,为什么builder不支持

HarmonyOS鸿蒙Next中关于@Reusable的复用范围,缓存池的大小问题,@Reusable标记的组件,为什么builder不支持

  1. @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

  2. @Reusable标记的组件会生成哪些差异:

    最主要的差异就是可复用,减少性能消耗,需要注意的是组件被复用后,ArkUI框架会将组件构造对应的参数输入给aboutToReuse生命周期回调,开发者需要在aboutToReuse生命周期中对需要进行更新的状态变量进行赋值,ArkUI框架将会基于最新的状态变量值对UI进行展示。 简单来说 就是这个复用组件将不会有aboutToapper生命周期,生命周期的区别。

  3. 为什么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

2 回复

在HarmonyOS鸿蒙Next中,@Reusable注解用于标记可复用的组件,以减少创建新实例的开销。@Reusable的复用范围通常是同一类型的组件实例,缓存池的大小由系统管理,开发者无法直接配置。@Reusable标记的组件在builder中不支持,因为builder通常用于动态创建组件实例,而@Reusable的设计意图是复用已有实例,这与builder的动态创建机制存在冲突。

更多关于HarmonyOS鸿蒙Next中关于@Reusable的复用范围,缓存池的大小问题,@Reusable标记的组件,为什么builder不支持的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


关于HarmonyOS Next中@Reusable的问题,简要回答如下:

  1. 复用范围:
  • 主要适用于列表滚动、动态布局更新和地图渲染等频繁创建销毁组件的场景
  • 必须直接用于LazyForEach内的组件才生效,嵌套的子组件不会复用
  1. 缓存池管理:
  • 框架自动管理缓存池大小
  • 开发者应在aboutToRecycle中释放数据资源
  • 复用组件通过aboutToReuse回调更新状态
  1. 差异点:
  • 复用组件会跳过常规创建流程
  • 使用aboutToReuse替代aboutToAppear
  • 状态更新需在aboutToReuse中显式处理
  1. builder不支持原因:
  • builder是轻量级UI复用机制
  • 设计定位不同,不适合承载复杂业务逻辑
  • 推荐在简单UI复用场景使用@Builder

注意复用组件的数据状态管理,确保在生命周期回调中正确处理数据初始化和释放。

回到顶部