我想在我的活动中使用两个soundpool。一个我将卸载并释放有时并用不同的声音加载它,然后我再次卸载/释放并再次使用其他声音,另一个将始终包含相同的声音,永远不会被卸载。我在文档中没有找到任何关于这个的话,所以它会给我带来什么样的问题吗? 如果我使用MediaPlayer而不是SoundPool的常量声音?它会导致任何内存泄漏或问题吗?
答案 0 :(得分:3)
如果您根据SoundPool
生命周期(见下文)正确处理了MediaPlayer
和Activity
个对象,则不会出现内存泄漏或声音播放问题。
首先,您不应该制作“太多”SoundPool
和MediaPlayer
个对象。这取决于您设备的实际状态,但我相信您可以使用2 SoundPool
个对象,例如同时有4个MediaPlayer
个对象。
说明:每个SoundPool
保留一个原生AudioTrack
,每个MediaPlayer
也保留一个原生AudioTrack
。因此,对于2个SoundPool
和4个MediaPlayer
个对象,您将使用6个基础AudioTrack
个对象。这通常很好,因为系统通常有更多的免费AudioTrack
对象。 (有关更多详细信息,请参阅this topic。)
关于您的具体问题:是的,只要您考虑以下几点,使用永久性SoundPool
和您有时会重新创建/发布的另一个SoundPool
也是可以的:
onPause()
或onStop()
事件处理程序中,您应释放所有 SoundPool
和MediaPlayer
个对象,因为它们使用原生资源。然后在onResume()
或onStart()
中,您可以重新创建它们。因此,您的语句“...永远不会被卸载”在这个意义上是不正确的,因为您需要处理SoundPool
和MediaPlayer
个对象的状态{1}}生命周期。