是否需要释放来自OpenSL ES音频播放器的完成缓冲区?

时间:2011-05-17 13:08:39

标签: android c android-ndk opensl

只是为了确认。当通过OpenSL ES for Android创建的音频播放器完成播放缓冲区时,垃圾收集器会自动释放该缓冲区吗?或者我自己需要释放缓冲区吗?

如果是后者,我可以使用一些帮助。但就目前而言,在我被告知我需要自己做之前,我不会发布任何代码......

2 个答案:

答案 0 :(得分:5)

缓冲区队列本身并不实际分配缓冲区内存(或需要释放它),您可以通过“enqueue”函数将指针传递给已分配的内存。完成播放缓冲区后,您需要释放分配的内存。

由于OpenSL ES是C ++中的本机库,它对垃圾收集一无所知,您为API分配的任何内存都必须由您释放,并且您创建的对象必须在其上调用“destroy”来清理内部存储器。

答案 1 :(得分:3)

如上一张海报所述,您可以使用之前创建的缓冲区调用Enqueue。但是,我要指出,除非你在你的应用程序中只播放一次音频事件,否则你应该继续重复使用你的音频缓冲区来完全避免GC - C的美妙!

另外,请查看Android OpenSL ES文档,该文档涉及在完成界面后销毁界面,必须手动完成。