アクティビティで 2 つのサウンドプールを使用したいと考えています。時々アンロードしてリリースし、別のサウンドでロードするもの、もう一度アンロード/リリースして他のサウンドで再度使用するもの、および常に同じサウンドを含み、決してアンロードしないもの. ドキュメントでこれについての言葉を見つけられなかったので、何か問題が発生しますか? また、SoundPool の代わりに MediaPlayer で一定のサウンドを使用するとどうなりますか? メモリリークや問題が発生しますか?
1 に答える
3
SoundPool
ライフサイクルの観点からMediaPlayer
オブジェクトを正しく処理すれば、メモリリークやサウンド再生の問題は発生しませんActivity
(以下を参照)。
まず第一に、「多すぎる」オブジェクトSoundPool
を作成するべきではありません。MediaPlayer
これはデバイスの実際の状態によって異なりますが、2つSoundPool
のオブジェクト、たとえば4つMediaPlayer
のオブジェクトを同時に使用しても問題ないと確信しています。
説明:それぞれSoundPool
が1つのネイティブを予約AudioTrack
し、それぞれがMediaPlayer
1つのネイティブも予約しAudioTrack
ます。したがって、2SoundPool
つと4つMediaPlayer
のオブジェクトを使用すると、6つの基になるAudioTrack
オブジェクトが使用されます。システムには通常、より多くの空きAudioTrack
オブジェクトがあるため、これは通常は問題ありません。(詳細については、このトピックを参照してください。)
具体的な質問について:はい、次の点を考慮すれば、パーマネントと、時々再作成/リリースSoundPool
するパーマネントを使用することもできます。SoundPool
- アクティビティの
onPause()
oronStop()
イベントハンドラーでは、ネイティブリソースを使用するため、すべてのオブジェクトとオブジェクトを解放する必要があります。 次に、またはで、それらを再作成できます。したがって、ライフサイクル全体でオブジェクトの状態とオブジェクトを処理する必要があるため、「...はアンロードされません」というステートメントは、この意味では正しくありません。SoundPool
MediaPlayer
onResume()
onStart()
SoundPool
MediaPlayer
Activity
于 2012-10-26T15:16:46.457 に答える