使用2个soundpool会导致我任何类型的内存泄漏吗?

时间:2012-10-26 14:49:39

标签: android soundpool

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

1 个答案:

答案 0 :(得分:3)

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

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

说明:每个SoundPool保留一个原生AudioTrack,每个MediaPlayer也保留一个原生AudioTrack。因此,对于2个SoundPool和4个MediaPlayer个对象,您将使用6个基础AudioTrack个对象。这通常很好,因为系统通常有更多的免费AudioTrack对象。 (有关更多详细信息,请参阅this topic。)

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

  • 在您的活动的onPause()onStop()事件处理程序中,您应释放所有 SoundPoolMediaPlayer个对象,因为它们使用原生资源。然后在onResume()onStart()中,您可以重新创建它们。因此,您的语句“...永远不会被卸载”在这个意义上是不正确的,因为您需要处理SoundPoolMediaPlayer个对象的状态{1}}生命周期。