在 uni-app 中,getRecorderManager 获取的录音管理器 recorderManager 是全局唯一的,因此你不能销毁它。但是,你可以移除所有的 onStop 事件监听器来避免重复回调的问题。以下是如何移除所有 onStop 事件监听器的方法:
使用 offStop 方法移除监听器:recorderManager 提供了 offStop 方法来移除 onStop 事件的监听器。你需要确保在页面卸载时调用这个方法,以避免重复绑定回调函数。// 页面卸载时 onUnload() { // 移除所有 onStop 事件监听器 recorderManager.offStop(); }确保使用相同的回调函数:如果你在页面加载时绑定了 onStop 事件监听器,确保在页面卸载时使用相同的回调函数来移除监听器。如果每次都定义一个新的函数,那么之前绑定的监听器不会被移除。
// 页面加载时 onLoad() { let stopCallback = (res) => { console.log('录音结束', res); }; recorderManager.onStop(stopCallback); }, // 页面卸载时 onUnload() { // 使用之前定义的相同的回调函数来移除监听器 recorderManager.offStop(stopCallback); }避免重复绑定:在页面加载时,检查是否已经绑定了 onStop 事件监听器,避免重复绑定。
let stopCallback = null; // 页面加载时 onLoad() { if (!stopCallback) { stopCallback = (res) => { console.log('录音结束', res); }; recorderManager.onStop(stopCallback); } }, // 页面卸载时 onUnload() { if (stopCallback) { recorderManager.offStop(stopCallback); stopCallback = null; } }
通过以上方法,你可以确保在页面卸载时正确地移除 onStop 事件监听器,避免重复回调的问题。这种方法适用于所有使用 getRecorderManager 的场景,确保资源得到正确管理。
网友回复