2011-05-17 91 views
3

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

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

回答

5

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

由于OpenSL ES是C++中的本地库,它不知道垃圾收集,因此您为API分配的任何内存都必须由您自由释放,并且您创建的对象必须具有对其调用的'destroy'以清除内部记忆。

+0

是的,我想到了很多,我已经实施了一个清理程序。不过,谢谢你确认我的怀疑。 – ThaMe90 2011-05-19 06:27:17

3

正如前面的海报所说,你用先前创建的缓冲区调用Enqueue。然而,我会指出,除非您的应用只播放一次音频事件,否则您应该不断重复使用音频缓冲区以避免使用GC - C的美妙之处!

同时检查一下Android OpenSL ES文档,关于一旦你完成了它们的销毁,你必须手动完成。

+0

虽然你说的是真的,但我已经发现并实现了它。就像我对前一张海报的评论一样,我已经有了一个清理程序,并且已经在重新使用缓冲区。尽管如此,感谢您的时间和评论。 :> – ThaMe90 2011-09-15 12:27:44

相关问题