我正在使用WebAudio播放音乐曲目。首先,我用以下命令完全解码
self.ctx.decodeAudioData(xhr.response, function (buffer) {
this.cache = buffer;
})并将解码后的缓冲区保存到某个变量中,以备我需要开始播放它时使用。
当我想切换音轨时,我会用以下命令清理音频节点
node.source.onended = function (value) {
node.source = null;
};而缓存中包含:
this.cache = null;
并将下一首曲目解码为相同的变量。
问题是,如果我切换几次曲目是快速连续的(比如3-4个3分钟的曲目),基于iOS的移动浏览器只是重新加载页面,因为看起来,我已经占用了所有可用的内存。虽然我只使用了一个缓冲区变量,但我猜垃圾收集器不会释放我不再使用的音频缓冲区的内存。
有什么想法可以改进实现吗?
发布于 2017-08-09 03:12:48
事实证明,问题出在垃圾收集器上。之前的记忆需要20-30秒才能真正清除。所以解决方案对我有效-我开始播放曲目,并禁用切换到另一首曲目的能力30秒。有足够的时间让内存清理所有东西。
https://stackoverflow.com/questions/37718951
复制相似问题