目录

AVPlayerNotRelease

通过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)