安卓mediaplayer(1)

當MediaPlayer對象剛剛使用new創建或在reset()被調用後,它處於空閒狀態;並且在release()被調用之後,它處於結束狀態。在這兩個狀態之間是MediaPlayer對象的生命週期。


在調用reset()之後,新構建的MediaPlayer對象與MediaPlayer對象之間有一個微妙但重要的區別。調用getCurrentPosition(),getDuration(),getVideoHeight(),getVideoWidth(),setAudioStreamType(int),setLooping(boolean),setVolume(float,float),pause(),start() ,stop(),seekTo(int),prepare()或prepareAsync()在空閒狀態爲兩種情況。如果在構建MediaPlayer對象之後立即調用這些方法中的任何一種,則用戶提供的回調方法OnErrorListener.onError()不會被內部播放器引擎調用,並且對象狀態保持不變;但是如果這些方法在reset()之後調用,則用戶提供的回調方法OnErrorListener.onError()將被內部播放器引擎調用,並且對象將被轉移到Error狀態。


還建議一旦MediaPlayer對象不再被使用,請立即調用release(),以便可以立即釋放與MediaPlayer對象關聯的內部播放器引擎使用的資源。資源可能包括單例資源,例如硬件加速組件和調用釋放失敗()可能導致MediaPlayer對象的後續實例落後於軟件實現或完全失敗。 MediaPlayer對象處於“結束”狀態後,將無法再使用,無法將其恢復到任何其他狀態。


此外,使用new創建的MediaPlayer對象處於空閒狀態,而使用重載的方便創建方法之一創建的對象不處於空閒狀態。實際上,如果使用create方法創建成功,則對象處於Prepared狀態。


通常,由於各種原因,諸如不支持的音頻/視頻格式,交錯音頻/視頻不足,分辨率過高,流超時等,一些播放控制操作可能會失敗。因此,在這種情況下,錯誤報告和恢復是一個重要的問題。有時由於編程錯誤,也可能發生無效狀態的回放控制動作。在所有這些錯誤條件下,如果已經通過setOnErrorListener(android.media.MediaPlayer.OnErrorListener)事先註冊了OnErrorListener,則內部播放器引擎將調用用戶提供的OnErrorListener.onError()方法。

重要的是要注意,一旦發生錯誤,MediaPlayer對象就會進入錯誤狀態(除了上述內容),即使應用程序尚未註冊錯誤偵聽器。


爲了重新使用處於Error狀態並從錯誤中恢復的MediaPlayer對象,可以調用reset()來將對象恢復到其空閒狀態。


這是一個很好的編程實踐,讓你的應用程序註冊一個OnErrorListener來尋找內部播放器引擎的錯誤通知。


拋出IlleglStateException以防止編程錯誤,例如調用prepare(),prepareAsync()或其中一個重載的setDataSource方法處於無效狀態。


調用setDataSource(FileDescriptor)或setDataSource(String)或setDataSource(Context,Uri)或setDataSource(FileDescriptor,long,long)將處於空閒狀態的MediaPlayer對象傳送到Initialized狀態。


如果在任何其他狀態下調用setDataSource(),都會拋出IllegalStateException異常。


總是注意可能從重載的setDataSource方法拋出的IllegalArgumentException和IOException是一個很好的編程實踐。


MediaPlayer對象必須首先進入“準備”狀態,才能開始播放。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章