BUG修复

This commit is contained in:
kron
2025-11-06 17:38:34 +08:00
parent 2ab601fef5
commit 28bcfbb00a
2 changed files with 76 additions and 2 deletions

View File

@@ -88,6 +88,20 @@ class AudioManager {
this.isLoading = false;
this.loadingPromise = null;
// 网络状态相关
this.networkOnline = true;
this.pendingPlayKey = null;
try {
uni.onNetworkStatusChange(({ isConnected }) => {
this.networkOnline = !!isConnected;
if (this.networkOnline) {
this.onNetworkRestored();
} else {
this.onNetworkLost();
}
});
} catch (_) {}
this.initAudios();
}
@@ -210,6 +224,11 @@ class AudioManager {
// 处理音频加载错误
handleAudioError(key) {
// 网络不可用时不重试,等重连后统一重建
if (!this.networkOnline) {
debugLog(`网络不可用,暂不重试音频: ${key}`);
return;
}
const currentRetries = this.retryCount.get(key) || 0;
if (currentRetries < this.maxRetries) {
@@ -233,6 +252,10 @@ class AudioManager {
// 重新加载音频
retryLoadAudio(key) {
if (!this.networkOnline) {
debugLog(`网络不可用,稍后再重载音频: ${key}`);
return;
}
const oldAudio = this.audioMap.get(key);
if (oldAudio) {
oldAudio.destroy();
@@ -242,6 +265,12 @@ class AudioManager {
// 播放指定音频
play(key) {
// 离线:缓存播放意图,待网络恢复后自动播放
if (!this.networkOnline) {
this.pendingPlayKey = key;
debugLog(`网络不可用,记录播放意图: ${key}`);
return;
}
// 覆盖播放:若当前播放且不是同一音频,先停止当前播放
if (this.currentPlayingKey && this.currentPlayingKey !== key) {
this.stop(this.currentPlayingKey);
@@ -314,6 +343,32 @@ class AudioManager {
this.currentPlayingKey = null;
}
// 断网回调:停止当前播放,避免误状态
onNetworkLost() {
try {
this.stopAll();
} catch (_) {}
}
// 重连回调:重建全部音频后,重放上一次的播放意图
onNetworkRestored() {
this.reinitializeOnReconnect();
if (this.pendingPlayKey) {
const key = this.pendingPlayKey;
this.pendingPlayKey = null;
// 避免与初始化竞态,轻微延迟后播放
setTimeout(() => {
this.play(key);
}, 20);
}
}
// 重连后统一重建音频实例
reinitializeOnReconnect() {
this.destroyAll();
this.initAudios();
}
// 手动重新加载指定音频
reloadAudio(key) {
if (audioFils[key]) {