在我的活動我有以下幾點:我的代碼是否足以防止MediaPlayer泄漏?
private Set<MediaPlayer> mediaPlayers;
public void onSomeEventInMyActivity()
{
// play sound
MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.my_sound);
mediaPlayers.add(mediaPlayer);
mediaPlayer.setOnCompletionListener(new OnCompletionListener()
{
@Override
public void onCompletion(MediaPlayer mp)
{
mp.release();
mediaPlayers.remove(mp);
}
});
mediaPlayer.start();
}
@Override
protected void onStart()
{
super.onStart();
mediaPlayers = new HashSet<MediaPlayer>();
}
@Override
protected void onStop()
{
super.onStop();
for (MediaPlayer mediaPlayer : mediaPlayers)
{
if (mediaPlayer.isPlaying())
{
mediaPlayer.stop();
}
mediaPlayer.release();
}
}
這段代碼足夠,還是會導致MediaPlayer的泄漏?是否需要onStop
和onStart
的實現,或者我可以僅僅依靠在onCompletion
中調用release
?
我這樣做了我的代碼,因爲我假設onStop()
可以在MediaPlayer播放時調用,所以我需要調用release
,因爲onCompletion
不會被調用。我只是猜測這是對的,如果我錯了,那麼糾正我。
我還讀到onStop
在低內存情況下不會調用 - 那麼該怎麼辦?
所以我想'onPause'是最安全的選擇,你上面貼的代碼應該是足以適用於所有操作系統,包括新舊操作系統?只是想確認除了您上面發佈的代碼以外沒有額外的東西需要額外處理...... –
我不認爲有任何額外需要,這就是我如何編程它。如果您的應用程序啓用了旋轉功能,那麼您的活動將被銷燬,其中包括對循環事件執行'onPause',然後重新創建,並且您必須在'onPause'中注意並且不要在'onCompletion'中調用onCompletion這種情況下,如果你想保持音頻去。最簡單的禁止旋轉!祝你好運! – emrys57
感謝您的明確答覆。 –