2

アクティビティで 2 つのサウンドプールを使用したいと考えています。時々アンロードしてリリースし、別のサウンドでロードするもの、もう一度アンロード/リリースして他のサウンドで再度使用するもの、および常に同じサウンドを含み、決してアンロードしないもの. ドキュメントでこれについての言葉を見つけられなかったので、何か問題が発生しますか? また、SoundPool の代わりに MediaPlayer で一定の​​サウンドを使用するとどうなりますか? メモリリークや問題が発生しますか?

4

1 に答える 1

3

SoundPoolライフサイクルの観点からMediaPlayerオブジェクトを正しく処理すれば、メモリリークやサウンド再生の問題は発生しませんActivity(以下を参照)。

まず第一に、「多すぎる」オブジェクトSoundPoolを作成するべきではありません。MediaPlayerこれはデバイスの実際の状態によって異なりますが、2つSoundPoolのオブジェクト、たとえば4つMediaPlayerのオブジェクトを同時に使用しても問題ないと確信しています。

説明:それぞれSoundPoolが1つのネイティブを予約AudioTrackし、それぞれがMediaPlayer1つのネイティブも予約しAudioTrackます。したがって、2SoundPoolつと4つMediaPlayerのオブジェクトを使用すると、6つの基になるAudioTrackオブジェクトが使用されます。システムには通常、より多くの空きAudioTrackオブジェクトがあるため、これは通常は問題ありません。(詳細については、このトピックを参照してください。)

具体的な質問について:はい、次の点を考慮すれば、パーマネントと、時々再作成/リリースSoundPoolするパーマネントを使用することもできます。SoundPool

  • アクティビティのonPause()oronStop()イベントハンドラーでは、ネイティブリソースを使用するため、すべてのオブジェクトとオブジェクトを解放する必要があります。 次に、またはで、それらを再作成できます。したがって、ライフサイクル全体でオブジェクトの状態とオブジェクトを処理する必要があるため、「...はアンロードされません」というステートメントは、この意味では正しくありません。SoundPoolMediaPlayeronResume()onStart()SoundPoolMediaPlayerActivity
于 2012-10-26T15:16:46.457 に答える