2013-05-14 50 views
9

是一個bug還是不能解除,停止或中止MediaPlayer,而它的準備?停止或釋放的MediaPlayer,同時它仍然準備

我的MediaPlayerService運行的實例,它停止罰款,如果我停止,釋放,將其設置爲空,而MediaPlayer準備狀態。但事實並非如此,如果我停止,釋放,將其設置爲空,如果它在準備狀態

onPrepared()之後停止,釋放調用,設置爲null。對此有一些解決方法?

我認爲這是當用戶想要停止MediaPlayer之前,它已經完成籌備常見的情況。

回答

13

通過查看MediaPlayer documentation,您不允許在未初始化的對象上調用stop();這是有道理的,因爲你無法阻止沒有運行/準備好的東西。

在另一方面,release()似乎在尋找the source code of MediaPlayer後做的伎倆。

但是,如果添加一個布爾標誌來指示MediaPlayer對象不再需要,並且使用該標誌釋放對象(如果onPrepared()被調用),則不會造成危害。

僞代碼如下所示:

public void cancel(){ 
mCancel = true; 
} 

public void onPrepared(MediaPlayer player){ 
    if(mCancel){ 
    player.release(); 
    //nullify your MediaPlayer reference 
    mediaPlayer = null 
    } 
} 
+0

謝謝Mr.Me.發佈工程很好。 – vandzi 2013-05-14 14:21:41

+0

onPrepared()方法的很好的解決方案。 – greaterKing 2016-02-15 14:51:45

+0

它的工作原理,但在這一點,我們必須將mCancel設置爲false? – 2017-02-14 11:32:10

1

另一種解決辦法是實行OnBufferingUpdateListener並覆蓋其方法是這樣的:

@Override 
public void onBufferingUpdate(MediaPlayer mp, int percent) { 
    if (cancel) { 
     mp.release(); 
     mMediaPlayer = null; 

    } 
}