引用格伦·卡斯滕的话:
“对于音频,每个设备有 32 个活动 AudioTrack 对象的硬性限制(不是每个应用程序:您需要与系统的其余部分共享这 32 个),并且 AudioTrack 在 SoundPool、ToneGenerator、MediaPlayer、基于 OpenSL 的本机音频内部使用ES等。但是实际AudioTrack限制是<32;它更多地取决于内存,CPU负载等软因素。另外注意Android混音器中的限制器目前没有动态范围压缩,所以可以如果您有大量活跃的声音并且它们都很响亮,则可以进行剪辑。”
因此,实际上,我使用的 1 个 MediaPlayer 对应于系统中的 1 个 AudioTrack。
重要问题:已发布的 MediaPlayers(即从我那里得到 release() 的那些)不算数,对吗?即,如果我有 7 个媒体播放器,但其中 5 个已经发布,我只使用了全局系统池中的 7-5=2 个 AudioTrack。这个对吗?
(因此,如果所有应用程序都正确地关心在其 onStop/onPause 中释放,那么很难达到上述硬限制;因为只有前台和可能一些暂停的应用程序会使用 AudioTracks——当然,除了操作系统) .