3

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

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

4

2 回答 2

5

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

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

于 2011-05-19T00:31:49.573 回答
3

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

还可以查看 Android OpenSL ES 文档,了解在完成后销毁接口,这必须手动完成。

于 2011-09-15T00:03:13.443 回答