只是为了确认。当通过适用于 Android 的 OpenSL ES 创建的音频播放器完成播放缓冲区时,垃圾收集器会自动释放该缓冲区吗?还是我需要自己释放缓冲区?
如果是后者,我可以使用一些帮助。但就目前而言,在我被告知我需要自己做之前,我不会发布任何代码......
只是为了确认。当通过适用于 Android 的 OpenSL ES 创建的音频播放器完成播放缓冲区时,垃圾收集器会自动释放该缓冲区吗?还是我需要自己释放缓冲区?
如果是后者,我可以使用一些帮助。但就目前而言,在我被告知我需要自己做之前,我不会发布任何代码......
缓冲区队列本身并不实际分配缓冲区内存(或需要释放它),您将指针传递给您通过“入队”函数分配的内存。播放完缓冲区后,您需要释放分配的内存。
由于 OpenSL ES 是 C++ 中的本机库,它对垃圾收集一无所知,您为 API 分配的任何内存都必须由您释放,并且您创建的对象必须调用“销毁”以清理内部内存。
正如之前的海报所说,您使用之前创建的缓冲区调用 Enqueue。但是,我要指出,除非您在应用程序中只播放一次音频事件,否则您可能应该继续重复使用音频缓冲区来完全避免 GC - C 的美妙之处!
还可以查看 Android OpenSL ES 文档,了解在完成后销毁接口,这必须手动完成。