您的位置:首页 > 移动开发 > Android开发

Android MediaPlayer的生命周期

2010-06-01 17:05 363 查看
本文转自:

http://blog.csdn.net/ddna/archive/2010/01/11/5178864.aspx

Android MediaPlayer的生命周期

MediaPlayer

的状态转换图也表征了它的生命周期,搞清楚这个图可以帮助我们在使用
MediaPlayer

时考虑情况更周全,写出的代码也更具健壮性。



这张状态转换图清晰的描述了
MediaPlayer

的各个状态,也列举了主要的方法的调用时序,每种方法只能在一些特定的状态下使用,如果使用时
MediaPlayer

的状态不正确则会引发

IllegalStateException
异常


Idle


状态:

当使用
new()

方法创建一个
MediaPlayer

对象或者调用了其
reset()

方法时,该
MediaPlayer

对象处于
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()

方法,这样
MediaPlayer

就处于
Started

状态,这表明
MediaPlayer

正在播放文件过程中。可以使用

isPlaying()

测试

MediaPlayer
是否处于了
Started
状态。
如果播放完毕,而又设置了循环
播放,则
MediaPlayer

仍然会处

Started

状态,类似的,如果在该状
态下
MediaPlayer

调用了
seekTo()

或者
start()

方法均可以让
MediaPlayer

停留在
Started

状态。

Paused


状态:

Started

状态下
MediaPlayer

调用
pause()

方法可以暂停
MediaPlayer

,从而进入
Paused

状态,
MediaPlayer

暂停后再次调用
start()

则可以继续
MediaPlayer

的播放,转到
Started

状态,暂停状态时可以调用
seekTo()

方法,这是不会改变状态的。

Stop


状态:

Started

或者
Paused

状态下均可调用
stop()

停止
MediaPlayer

,而处于
Stop

状态的
MediaPlayer

要想重新播放,需要通过
prepareAsync()


prepare()

回到先前的
Prepared

状态重新开始才可以。

PlaybackCompleted


状态:

文件正常播放完毕,而又没有设置循环播放的话就进入该状态,并会触发
OnCompletionListener


onCompletion()

方法。此时可以调用
start()

方法重新从头播放文件,也可以
stop()

停止
MediaPlayer

,或者也可以
seekTo()

来重新定位播放位置。

Error


状态:

如果由于
某种原因
MediaPlayer

出现了错
误,会触发
OnErrorListener.onError()

事件,此时
MediaPlayer

即进入
Error

状态,及时捕捉并妥善处理这些错误是很重要的,可以帮助我们及时释放相关的软硬件资源,也可以改善用
户体验。通过
setOnErrorListener(android.media.MediaPlayer.OnErrorListener)

可以设置该监听器。如果
MediaPlayer

进入了
Error

状态,可以通过调用
reset()

来恢复,使得
MediaPlayer

重新返回到
Idle

状态。

参考文档:
AndroidSDK1.5

官方文档:
android-sdk-windows-1.5_r3/docs/reference/android/media/MediaPlayer.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: