自定义组件参数

说明:

  • 本模块首批接口从API version 11开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。

  • 本模块接口仅可在Stage模型下使用。

ComponentOptions

自定义组件参数,用于配置是否支持组件冻结。

系统能力: SystemCapability.ArkUI.ArkUI.Full

模型约束: 此接口仅可在Stage模型下使用。

名称 类型 只读 可选 说明
freezeWhenInactive boolean 配置自定义组件支持组件冻结。true:开启组件冻结,false:不开启组件冻结。当开发者未指定ComponentOptions时,freezeWhenInactive将使用false作为默认值。
从API version 11开始,支持通过此参数配置@Component组件冻结。例子可见自定义组件冻结
从API version 12开始,支持通过此参数配置@ComponentV2组件冻结。例子可见自定义组件冻结
卡片能力: 从API version 11开始,该接口支持在ArkTS卡片中使用。
原子化服务API: 从API version 12开始,该接口支持在原子化服务中使用。
reusePool ReusePoolOwnership 在自定义组件上配置全局复用池的类型,如果不传入,则全局复用池不会生效。
起始版本: 26.0.0
卡片能力: 从API版本26.0.0开始,该接口支持在ArkTS卡片中使用。
原子化服务API: 从API版本26.0.0开始,该接口支持在原子化服务中使用。
poolAccepts Function[] 自定义组件全局复用池接纳的自定义组件名称,reusePool参数被设置时,poolAccepts必须为非空数组。poolAccepts和reusePool都没有赋值时,全局复用不生效。
起始版本: 26.0.0
卡片能力: 从API版本26.0.0开始,该接口支持在ArkTS卡片中使用。
原子化服务API: 从API版本26.0.0开始,该接口支持在原子化服务中使用。

ReusableOptions

可复用自定义组件的参数,用于配置内存优化策略。

起始版本: 26.0.0

原子化服务API: 从API版本26.0.0开始,该接口支持在原子化服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

名称 类型 只读 可选 说明
memoryOptimizationStrategy ReusableMemOptStrategy 可复用自定义组件的内存优化策略。该参数在创建可复用自定义组件时设定,不支持动态修改。
默认值:DEFAULT

ReusableMemOptStrategy

可复用自定义组件内存优化策略枚举。

起始版本: 26.0.0

原子化服务API: 从API版本26.0.0开始,该接口支持在原子化服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

名称 说明
DEFAULT 0 无内存优化策略。
ENABLE_AUTO_CACHE_OPTIMIZATION 1 << 0 自动内存优化策略,当可复用自定义组件内存占用较高时,建议使用此策略以降低内存使用量。
当应用退后台时、复用池所在组件不可见时(visibility属性设置为Visible以外的值,或组件面积为0,不考虑遮挡)、整机低内存时(MemoryLevel达到MEMORY_LEVEL_LOW或MEMORY_LEVEL_CRITICAL),释放复用池内的所有该类型自定义组件。
当复用池中相同ReuseId的该类型自定义组件数量超过8,且5分钟内不再增加时,保留8个组件,释放其余组件。
在释放节点时,会触发自定义组件生命周期

示例

示例1(使用自动内存优化策略)

以下示例中,可复用自定义组件ReusableComponent通过ReusableOptions的memoryOptimizationStrategy属性使用了自动内存优化策略。点击Recycle按钮,可触发ReusableComponent组件回收。之后应用退后台,可触发复用池缓存释放。

从API版本26.0.0开始,新增ReusableOptions接口。

@Reusable({ memoryOptimizationStrategy: ReusableMemOptStrategy.ENABLE_AUTO_CACHE_OPTIMIZATION }) // 使用自动内存优化策略
@Component
struct ReusableComponent {
  aboutToRecycle() {
    console.info('ReusableComponent aboutToRecycle');
  }
  aboutToDisappear() {
    console.info('ReusableComponent aboutToDisappear');
  }
  build() {
    Text('ReusableComponent')
  }
}

@Entry
@Component
struct MemoryOptimizeDemo {
  @State showReusableComponent: boolean = true;
  build() {
    Column() {
      Button('Recycle').onClick(() => { // 点击按钮触发组件回收
        this.showReusableComponent = false;
      })
      if (this.showReusableComponent) {
        ReusableComponent()
      }
    }
  }
}

ReusePoolOwnership

type ReusePoolOwnership = 'shared' | 'perInstance'

全局复用池的持有类型。

起始版本: 26.0.0

原子化服务API: 从API版本26.0.0开始,该接口支持在原子化服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

类型 说明
'shared' 拥有@Component/@ComponentV2类的所有实例共享单个复用池实例。
'perInstance' 拥有@Component/@ComponentV2的每个实例都有自己的复用池实例。