自定义组件参数
说明:
本模块首批接口从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的每个实例都有自己的复用池实例。 |