跳到主要内容

@performance/hp-arkui-suggest-cache-avplayer

建议缓存AVPlayer实例减少起播时延。

音视频起播速度慢的场景下,建议优先修改。

规则配置

// code-linter.json5
{
"rules": {
"@performance/hp-arkui-suggest-cache-avplayer": "warn",
}
}

选项

该规则无需配置额外选项。

正例

import media from '@ohos.multimedia.media';

@Entry
@Component
struct MyComponent{
private avPlayer: media.AVPlayer | undefined = undefined;
private avPlayerManager: AVPlayerManager = AVPlayerManager.getInstance();

aboutToAppear(): void {
this.avPlayerManager.switchPlayer();
this.avPlayer = this.avPlayerManager.getCurrentPlayer();
}

aboutToDisappear(): void {
this.avPlayerManager.resetCurrentPlayer();
this.avPlayer = undefined;
}

build() {
// 组件布局
}
}

class AVPlayerManager {
private static instance?: AVPlayerManager;

private player1?: media.AVPlayer;
private player2?: media.AVPlayer;
private currentPlayer?: media.AVPlayer;

public static getInstance(): AVPlayerManager {
if (!AVPlayerManager.instance) {
AVPlayerManager.instance = new AVPlayerManager();
}
return AVPlayerManager.instance;
}

async AVPlayerManager() {
this.player1 = await media.createAVPlayer();
this.player2 = await media.createAVPlayer();
}

/**
* 切换页面时切换AVPlayer实例
*/
switchPlayer(): void {
if (this.currentPlayer === this.player1) {
this.currentPlayer = this.player2;
} else {
this.currentPlayer = this.player1;
}
}

getCurrentPlayer(): media.AVPlayer | undefined {
return this.currentPlayer;
}

/**
* 使用reset方法重置AVPlayer实例
*/
resetCurrentPlayer(): void {
this.currentPlayer?.pause(() => {
this.currentPlayer?.reset();
});
}
}

反例

import media from '@ohos.multimedia.media';

@Entry
@Component
struct MyComponent{
private avPlayer: media.AVPlayer | undefined = undefined;

aboutToAppear(): void {
// 页面创建时初始化AVPlayer实例
media.createAVPlayer().then((ret) => {
this.avPlayer = ret;
});
}

aboutToDisappear(): void {
// 离开页面时销毁AVPlayer实例
if (this.avPlayer) {
this.avPlayer.release();
}
this.avPlayer = undefined;
}

build() {
// 组件布局
}
}

规则集

plugin:@performance/recommended
plugin:@performance/all

Code Linter代码检查规则的配置指导请参考Code Linter代码检查