@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代码检查。