一、官方文檔
https://developer.android.com/reference/android/media/MediaPlayer.html
二它掂、狀態(tài)機(jī)
三、核心內(nèi)容
- MediaPlayer的生命周期是從new對(duì)象或reset方法起峭范,到release方法為止慨蛙,即Idle至End
- 在構(gòu)造函數(shù)后調(diào)用getDuration等方法,不回觸發(fā)OnErrorListener的onError方法痴脾,但reset之后直接調(diào)用會(huì)觸發(fā)
- 一旦不需要使用MediaPlayer颤介,調(diào)用release方法可以立即釋放資源,同時(shí)該player對(duì)象會(huì)永遠(yuǎn)處于End狀態(tài)
- new出來的MediaPlayer處于Idle狀態(tài)赞赖,create方法初始化的MediaPlayer處于Prepared狀態(tài)
- 只能在MediaPlayer的Idle狀態(tài)調(diào)用setDataSource方法滚朵,其他狀態(tài)下調(diào)用會(huì)報(bào)錯(cuò)
- 在Preparing狀態(tài)下調(diào)用的任何方法都有可能引起未知的錯(cuò)誤
- 只能在MediaPlayer的Initialized狀態(tài)下調(diào)用prepare或prepareAsync方法,其他狀態(tài)下調(diào)用會(huì)報(bào)錯(cuò)
- MediaPlayer一定要處于Prepared狀態(tài)下時(shí)才能開始播放
- 如果MediaPlayer已經(jīng)處于Started狀態(tài)了前域,那么再次調(diào)用start方法不會(huì)起作用
- 在Started和Paused之間的狀態(tài)變化是異步的辕近,會(huì)有秒級(jí)的耗時(shí),這時(shí)候isPlaying方法的返回值可能不準(zhǔn)確
- 在Started匿垄、Paused移宅、Prepared或PlaybackCompleted狀態(tài)調(diào)用stop都會(huì)進(jìn)入Stoped狀態(tài)
- seekto方法是即時(shí)的,但需要一定時(shí)間緩沖內(nèi)容椿疗,緩沖完成后OnSeekCompleteListener會(huì)被觸發(fā)