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