2011-05-17 89 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

相關問題