2

我想在我的活动中使用两个声音池。有时我会卸载和释放并加载不同的声音,然后我再次卸载/释放并再次与其他声音一起使用,另一个将始终包含相同的声音并且永远不会被卸载。我在文档中没有找到任何关于此的文字,所以它会给我带来任何问题吗?如果我使用 MediaPlayer 而不是 SoundPool 的恒定声音?它会导致任何内存泄漏或问题吗?

4

1 回答 1

3

如果您根据生命周期正确处理对象SoundPoolMediaPlayer对象,则不会出现内存泄漏或声音播放问题Activity(见下文)。

首先,你不应该做“太多”SoundPoolMediaPlayer对象。这取决于您设备的实际状态,但我相信您可以同时使用 2 个SoundPool对象,例如 4 个MediaPlayer对象。

说明:每人SoundPool预留一名本地人AudioTrack,每人MediaPlayer也预留一名本地人AudioTrack。因此,使用 2SoundPool和 4 个MediaPlayer对象,您将有 6 个底层AudioTrack对象在使用中。这通常很好,因为系统通常有更多的空闲AudioTrack对象。(有关更多详细信息,请参阅此主题。)

关于您的具体问题:是的,只要您考虑以下几点,也可以使用永久的SoundPool和有时重新创建/发布的另一个:SoundPool

  • 在您的活动的onPause()onStop()事件处理程序中,您应该释放所有 SoundPoolMediaPlayer对象,因为它们使用本机资源。然后在您的onResume()oronStart()中,您可以再次重新创建它们。因此,从这个意义上说,您的陈述“...永远不会被卸载”是不正确的,因为您需要在整个生命周期中处理对象的状态SoundPoolMediaPlayer对象Activity
于 2012-10-26T15:16:46.457 回答