display.Display为屏幕实例,描述Display对象的属性和方法,在.on()方法使用完毕后,需及时调用对应的.off()方法注销监听,避免导致内存泄漏。
调用.on()监听接口后,只要存在对应的.off()调用(即取消全部或部分监听),不产生告警;仅当代码中不存在任何.off()调用时,才产生告警。
// rules.json
{
"rules": {
"arkts": {
"ResourceLeak": [
{
"ruleId": "DisplayClassListenerNotOff",
"severity": "error",
"skip": false
}
]
}
}
} import animator, { AnimatorOptions, AnimatorResult, SimpleAnimatorOptions } from '@ohos.animator';
let simpleOptions: SimpleAnimatorOptions = new SimpleAnimatorOptions(100, 200).duration(2000);
let options: AnimatorOptions = {
duration: 1500,
easing: "friction",
delay: 0,
fill: "forwards",
direction: "normal",
iterations: 3,
begin: 200.0,
end: 400.0,
};
/**
* 正例:正确释放资源
*/
@Component
export struct TestRelease {
private animator1: AnimatorResult = animator.create(simpleOptions);
private animator2: AnimatorResult = animator.createAnimator(options);
aboutToAppear() {
console.log('Do something else');
}
build() {
Text('Hello TestRelease')
}
aboutToDisappear() {
this.animator1.cancel();
this.animator2.finish();
}
} import animator, { AnimatorOptions, AnimatorResult, SimpleAnimatorOptions } from '@ohos.animator';
let simpleOptions: SimpleAnimatorOptions = new SimpleAnimatorOptions(100, 200).duration(2000);
let options: AnimatorOptions = {
duration: 1500,
easing: "friction",
delay: 0,
fill: "forwards",
direction: "normal",
iterations: 3,
begin: 200.0,
end: 400.0,
};
/**
* 反例:未释放资源
*/
@Component
export struct TestNotRelease {
private animator1: AnimatorResult = animator.create(simpleOptions);
private animator2: AnimatorResult = animator.createAnimator(options); // leak
aboutToAppear() {
console.log('Do something else');
}
build() {
Text('Hello TestNotRelease')
}
aboutToDisappear() {
this.animator1.cancel();
}
} Code Scanner代码检查规则的配置指导请参考1.6.3 代码检查工具(codescanner)