小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

【Android筆記】AndroidMediaPlayer的生命周期

 shaobin0604@163.com 2010-07-15

Android MediaPlayer的生命周期

MediaPlayer的狀態(tài)轉(zhuǎn)換圖也表征了它的生命周期,搞清楚這個圖可以幫助我們在使用MediaPlayer時考慮情況更周全,寫出的代碼也更具健壯性。

 


 

這張狀態(tài)轉(zhuǎn)換圖清晰的描述了MediaPlayer的各個狀態(tài),也列舉了主要的方法的調(diào)用時序,每種方法只能在一些特定的狀態(tài)下使用,如果使用時MediaPlayer的狀態(tài)不正確則會引發(fā)IllegalStateException異常

 

Idle 狀態(tài):當(dāng)使用new()方法創(chuàng)建一個MediaPlayer對象或者調(diào)用了其reset()方法時,該MediaPlayer對象處于idle狀態(tài)。這兩種方法的一個重要差別就是:如果在這個狀態(tài)下調(diào)用了getDuration()等方法(相當(dāng)于調(diào)用時機(jī)不正確),通過reset()方法進(jìn)入idle狀態(tài)的話會觸發(fā)OnErrorListener.onError(),并且MediaPlayer會進(jìn)入Error狀態(tài);如果是新創(chuàng)建的MediaPlayer對象,則并不會觸發(fā)onError(),也不會進(jìn)入Error狀態(tài)。

 

End 狀態(tài):通過release()方法可以進(jìn)入End狀態(tài),只要MediaPlayer對象不再被使用,就應(yīng)當(dāng)盡快將其通過release()方法釋放掉,以釋放相關(guān)的軟硬件組件資源,這其中有些資源是只有一份的(相當(dāng)于臨界資源)。如果MediaPlayer對象進(jìn)入了End狀態(tài),則不會在進(jìn)入任何其他狀態(tài)了。

 

Initialized 狀態(tài):這個狀態(tài)比較簡單,MediaPlayer調(diào)用setDataSource()方法就進(jìn)入Initialized狀態(tài),表示此時要播放的文件已經(jīng)設(shè)置好了。

 

Prepared 狀態(tài):初始化完成之后還需要通過調(diào)用prepare()prepareAsync()方法,這兩個方法一個是同步的一個是異步的,只有進(jìn)入Prepared狀態(tài),才表明MediaPlayer到目前為止都沒有錯誤,可以進(jìn)行文件播放。

 

Preparing 狀態(tài):這個狀態(tài)比較好理解,主要是和prepareAsync()配合,如果異步準(zhǔn)備完成,會觸發(fā)OnPreparedListener.onPrepared(),進(jìn)而進(jìn)入Prepared狀態(tài)。

 

Started 狀態(tài):顯然,MediaPlayer一旦準(zhǔn)備好,就可以調(diào)用start()方法,這樣MediaPlayer就處于Started狀態(tài),這表明MediaPlayer正在播放文件過程中??梢允褂?/span>isPlaying()測試MediaPlayer是否處于了Started狀態(tài)。如果播放完畢,而又設(shè)置了循環(huán)播放,則MediaPlayer仍然會處于Started狀態(tài),類似的,如果在該狀態(tài)下MediaPlayer調(diào)用了seekTo()或者start()方法均可以讓MediaPlayer停留在Started狀態(tài)。

 

Paused 狀態(tài):Started狀態(tài)下MediaPlayer調(diào)用pause()方法可以暫停MediaPlayer,從而進(jìn)入Paused狀態(tài),MediaPlayer暫停后再次調(diào)用start()則可以繼續(xù)MediaPlayer的播放,轉(zhuǎn)到Started狀態(tài),暫停狀態(tài)時可以調(diào)用seekTo()方法,這是不會改變狀態(tài)的。

 

Stop 狀態(tài):Started或者Paused狀態(tài)下均可調(diào)用stop()停止MediaPlayer,而處于Stop狀態(tài)的MediaPlayer要想重新播放,需要通過prepareAsync()prepare()回到先前的Prepared狀態(tài)重新開始才可以。

 

PlaybackCompleted狀態(tài):文件正常播放完畢,而又沒有設(shè)置循環(huán)播放的話就進(jìn)入該狀態(tài),并會觸發(fā)OnCompletionListeneronCompletion()方法。此時可以調(diào)用start()方法重新從頭播放文件,也可以stop()停止MediaPlayer,或者也可以seekTo()來重新定位播放位置。

 

Error狀態(tài):如果由于某種原因MediaPlayer出現(xiàn)了錯誤,會觸發(fā)OnErrorListener.onError()事件,此時MediaPlayer即進(jìn)入Error狀態(tài),及時捕捉并妥善處理這些錯誤是很重要的,可以幫助我們及時釋放相關(guān)的軟硬件資源,也可以改善用戶體驗。通過setOnErrorListener(android.media.MediaPlayer.OnErrorListener)可以設(shè)置該監(jiān)聽器。如果MediaPlayer進(jìn)入了Error狀態(tài),可以通過調(diào)用reset()來恢復(fù),使得MediaPlayer重新返回到Idle狀態(tài)。

 

參考文檔:AndroidSDK1.5官方文檔:android-sdk-windows-1.5_r3/docs/reference/android/media/MediaPlayer.html

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多