Android_MediaPlayer生命周期

 

MediaPlayer的生命周期包括10种状态,每种状态下可以调用相应的方法来实现音/视频文件的管理和播放。

Idle状态

使用new方法创建一个MediaPlayer对象或者调用了其reset方法时,该MediaPlayer对象处于idle状态

但通过2种不同方式进入idle状态还是有区别的,主要体现为:在这个状态下调用了getDuration等方法,若是通过reset方法进入idle状态会触发OnErrorListener.onError,并且MediaPlayer会进入Error状态;如果是新创建的MediaPlayer对象,则不会触发onError,也不会进入Error状态。

End状态

通过release方法可以进入End状态,只要MediaPlayer对象不再被使用,就应当尽快将其通过release方法释放,以释放其占用的软、硬件资源,这其中有些资源是互斥的,如果MediaPlayer进入End状态,那么就不会进入其它状态了

Initialized状态

这个状态比较简单,MediaPlayer对象调用了setDataSource方法就进入Initialized状态,表示此时的播放文件已经设置好了。

Prepared状态

初始化完成之后,还需要通过调用prepare或者prepareAsync方法进行准备,这两个方法一个是同步的一个是异步的,只有进入了Prepared状态,才表明MediaPlayer到目前位子都工作正常,可以进行音乐文件的播放。

Preparing状态

主要是与prepareAsync异步方法陪不,如果异步准备完成,会触发OnPreparedListener.onPrepared,进而进入Prepared状态

Started状态

MediaPlayer准备完成后,通过调用start方法,将进入Started状态,所谓Started状态,也即是播放中状态,可以使用isPlaying方法测试是否处于Started状态。

如果播放完毕,而又设置了循环播放,则MediaPlayer仍然会处于Started状态,类似的,如果在该状态下调用了seekTo或者start方法均可以是MediaPlayer停留在Started状态

Paused状态

Started状态下调用pause方法可以暂停播放,从而进入Paused状态。MediaPlayer暂停后再次调用start方法可以继续进行播放,并转到Started状态。暂停状态下可以调用seekTo方法,这是不会改变状态的。

Stop状态

Started状态或Paused状态下均可以调用stop方法停止播放并进入Stop状态,而处于Stop状态的MediaPlayer要想重新播放,则要通过调用prepare或者prepareAsync方法返回到先前的Prepared状态才可以重新开始

mp.stop()

try {

mp.prepare();

}

PlaybackCompleted状态

文件正常播放完毕,而又没有设置循环播放的就进入该状态,并出触发onCompletionListener接口中的onCompletion方法。此时调用start方法重新从头播放文件,也可以调用stop方法停止播放,或者调用seekTo方法来重新定位播放位置

Error状态

由于某种原因MediaPlayer出现错误,则会触发OnErrorListener.onError回调方法,此时MediaPlayer即进入Error状态。及时捕捉并处理这些信息,可以帮助应用程序释放相关的软、硬件资源。

如果MediaPlayer进入了Error状态,可以通过调用reset方法来回复,使得MediaPlayer重新返回到Idle状态

 

Linux内核代码及解析 0分下载:http://download.csdn.net/detail/zqiang_55/4392290

bash shell 教程  0分下载:http://download.csdn.net/detail/zqiang_55/4406949

posted on 2012-07-10 21:21  吴一达  阅读(524)  评论(0编辑  收藏  举报

导航