通过media.createAVPlayer()方法创建的AVPlayer实例,需及时调用release()方法释放实例,避免因多实例导致内存消耗过大,进而引发系统终止应用的风险。
// rules.json
{
"rules": {
"arkts": {
"ResourceLeak": [
{
"ruleId": "AVPlayerNotRelease",
"severity": "error",
"skip": false
}
]
}
}
} import UIAbility from '@ohos.app.ability.UIAbility';
import media from '@ohos.multimedia.media';
import { window } from '@kit.ArkUI';
/**
* 正例:正确释放资源
*/
export default class TestRelease extends UIAbility {
private avPlayer: media.AVPlayer | null = null;
async onWindowStageCreate(windowStage: window.WindowStage): Promise<void> {
this.avPlayer = await media.createAVPlayer();
}
async onDestroy(): Promise<void> {
this.avPlayer?.release();
}
} import UIAbility from '@ohos.app.ability.UIAbility';
import media from '@ohos.multimedia.media';
import { window } from '@kit.ArkUI';
/**
* 反例:未释放资源
*/
export class TestNotRelease extends UIAbility {
private avPlayer: media.AVPlayer | null = null;
async onWindowStageCreate(windowStage: window.WindowStage): Promise<void> {
this.avPlayer = await media.createAVPlayer(); // leak
}
} Code Scanner代码检查规则的配置指导请参考1.6.3 代码检查工具(codescanner)