グレン・カステンの引用:
「オーディオの場合、デバイスごとに 32 個のアクティブな AudioTrack オブジェクトというハード リミットがあり(アプリごとではありません。これらの 32 個をシステムの残りの部分と共有する必要があります)、AudioTrack は、SoundPool、ToneGenerator、MediaPlayer、OpenSL ベースのネイティブ オーディオの下で内部的に使用されます。 ES など。しかし、実際の AudioTrack 制限は < 32 です。これは、メモリ、CPU 負荷などのソフト要因に大きく依存します。また、Android オーディオ ミキサーのリミッターには現在ダイナミック レンジ圧縮がないため、可能であることに注意してください。多数のアクティブなサウンドがあり、それらがすべて大きい場合にクリッピングします。」
したがって、実際には、私が使用する 1 つの MediaPlayer は、システムの 1 つの AudioTrack に対応します。
重要な質問: リリースされた MediaPlayer (つまり、私から release() を取得したもの) はカウントされませんよね? つまり、7 つの Media Player があり、そのうちの 5 つが既にリリースされている場合、グローバル システム プールから 7-5=2 AudioTracks しか使いません。これは正しいです?
(したがって、すべてのアプリケーションが onStop/onPause でのリリースを正しく処理している場合、上記のハード リミットに到達することは困難です。フォアグラウンド アプリと一時停止中のアプリのみが AudioTracks を使用するためです。もちろん、OS は除きます)。 .