我想在我的活动中使用两个声音池。有时我会卸载和释放并加载不同的声音,然后我再次卸载/释放并再次与其他声音一起使用,另一个将始终包含相同的声音并且永远不会被卸载。我在文档中没有找到任何关于此的文字,所以它会给我带来任何问题吗?如果我使用 MediaPlayer 而不是 SoundPool 的恒定声音?它会导致任何内存泄漏或问题吗?
问问题
962 次
1 回答
3
如果您根据生命周期正确处理对象SoundPool
和MediaPlayer
对象,则不会出现内存泄漏或声音播放问题Activity
(见下文)。
首先,你不应该做“太多”SoundPool
的MediaPlayer
对象。这取决于您设备的实际状态,但我相信您可以同时使用 2 个SoundPool
对象,例如 4 个MediaPlayer
对象。
说明:每人SoundPool
预留一名本地人AudioTrack
,每人MediaPlayer
也预留一名本地人AudioTrack
。因此,使用 2SoundPool
和 4 个MediaPlayer
对象,您将有 6 个底层AudioTrack
对象在使用中。这通常很好,因为系统通常有更多的空闲AudioTrack
对象。(有关更多详细信息,请参阅此主题。)
关于您的具体问题:是的,只要您考虑以下几点,也可以使用永久的SoundPool
和有时重新创建/发布的另一个:SoundPool
- 在您的活动的
onPause()
或onStop()
事件处理程序中,您应该释放所有SoundPool
和MediaPlayer
对象,因为它们使用本机资源。然后在您的onResume()
oronStart()
中,您可以再次重新创建它们。因此,从这个意义上说,您的陈述“...永远不会被卸载”是不正确的,因为您需要在整个生命周期中处理对象的状态SoundPool
和MediaPlayer
对象Activity
。
于 2012-10-26T15:16:46.457 回答