微信小游戏音频无法释放问题,可有偿解决。

  • Creator 版本: 2.4.12
    我的代码是加载bundle里面的所有资源,然后通关后,会releaseAll掉bundle里面的所有资源,但是经过测试,每次加载和释放后,内存会一直增长。最后发现是音频的问题。问了小秘书然后一直也没回复,我可以付费解决问题。
    我的代码如下:

    这是微信后台内存增长截图:

    然后相同的代码 我用3.8版本的 内存似乎就不怎么增长了
    这是3.8的截图:

    这是我的demo工程,欢迎各位大佬指点一二。
    NeiCunCeShi.rar (2.8 MB)

试试map clear的时候查clip计数,强制decRef

是因为 微信的 音频实例没有释放

那我这边要怎么去释放 微信的音频实例呢 :smiley:

看我注释的代码里面,调用过decRef这个 还是不行

dec只会减一,建议加个日志看看是多少,是不是大于1

/**

  • 解决音效资源释放问题。

  • (audioclip加载的时候创建了innerAudioContext并且赋值给this._audio,但是destroy的时候没有销毁innerAudioContext)

  • 微信官方文档标注需要手动调用audioContext.destroy()

*/

var AudioClip = cc.AudioClip;

var OldDestroy = AudioClip.prototype.destroy;

Object.assign(AudioClip.prototype, {

destroy: function () {

  //  console.log(`audio clip release ${this.name}`);

  OldDestroy.call(this);

  this._audio && this._audio.destroy();

  this._audio = null;

}

});

看了下cocos封装的好像还真没释放

刚才测试了,内存还是有增长呢,还会有别的地方没释放掉吗?

image

强制回收GC再看看吧,wx.triggerGC();

我看了一下,我这3.7.X的版本,

这代码是有的,但这玩意内存其实还是会泄露的…
所以问题可能不在这.

同样的代码 我用3.8就没问题 真是奇怪

可以了,是我先把Map给clear了,导致没有手动调用destory :rofl:。太感谢了,方便加联系方式吗,可以给你发个红包。

还是有个小问题,如果我destory掉这个audioclip,我再次加载这个Bundle,就是播放不了了。

这个就要检测一下你二次加载的时候是不是加载管线出问题,导致没有正常加载到音频资源了。正常是不会有这个问题的。

第二次加载的时候,加载到音频资源了,但是log里面_auido 是 null了,应该是这个原因导致不能播放,我就是调用了audioclip.destory(),怎么检查时加载的管线问题呢?

你都删除完了, bundle都需要重新加载了 . bundle.get这个方式就不行了

我二次加载的时候没有有bundle.get,我是重新加载了一遍bundle。

这简单了 ,直接断点看