您的位置:首页 > 其它

Adroid开发之MediaPlayer生命周期

2016-03-15 20:11 169 查看
MediaPlayer状态图



通过上图,我们可以看出一个MediaPlayer对象拥有以下几种状态:

当一个MediaPlayer对象通过new创建出来或者在reset()方法调用之后,它将处于Idle(闲置)状态,在release()方法调用之后,处于End(结束)状态,在这两者之间的状态就是MediaPlayer的生命周期。

new出的MediaPlayer和调用reset()方法之后的MediaPlayer对象有一些细微的区别,在Idle状态调用一些方法会造成错误。此时,如果是通过构造方法得到的MediaPlayer,回调方法OnErrorListener.onError()不会被系统调用,并且该对象状态也不会改变;而如果是reset()之后的MediaPlayer对象,系统会调用回调方法OnErrorListener.onError(),并且对象状态Error(错误)。

当一个MediaPlayer对象不用的时候,立即调用release()方法,使得系统释放资源,当一个MediaPlayer对象进入End状态,就不能被重新使用,也无法改变状态。

另外,当一个MediaPlayer对象是通过一个create方法生成的,它就会直接处于prepared(预备)状态。

通常,一些播放上的操作出错有许多原因:例如不支持的音视频格式,不良好的交叉扫描,分辨率过高等。因此,错误报告和恢复程序运行是非常重要的。有时在一些无效的状态调用一些播放操作也有可能出现,所以内核播放引擎提供调用OnErrorListener.onError()方法,前提是OnErrorListener 在setOnErrorListener(android.media.MediaPlayer.OnErrorListener)这里注册过

当一个错误出现的时候,MediaPlayer会进入Error状态,即使这个错误监听器没有被注册

为了使进入Error状态的MediaPlayer可以重新使用,调用reset()方法可以让他进入Idle状态

调用setDataSource(FileDescriptor), or setDataSource(String), or setDataSource(Context, Uri), or setDataSource(FileDescriptor, long, long), or setDataSource(MediaDataSource)方法使MediaPlayer从Idle状态进入Initialized(初始化)状态

MediaPlayer在播放之前必须进入Prepared状态

Prepared状态有两种方式,synchronous和asynchronous

开始播放必须调用start()方法,当start()方法成功返回,MediaPlayer才会处于started状态,通过isPlaying()方法测试

对一个处于started状态的对象使用start()方法是没有效果的

播放过程中,可以暂停和停止,并且可以调整当前播放的位置。当调用pause()方法,进入paused状态

调用start()方法重新开始一个处于pause状态的MediaPlayer对象,然后处于started状态

调用stop()方法会使处于started, paused, prepared, playBackCompleted状态的对象处于stopped状态

当MediaPlayer对象处于stopped状态时,除非它重新回到prepared状态,否则他不能start

调用seekTo()方法调整媒体的位置

seekTo()方法也可以在prepared, paused, playBackCompleted状态使用

getCurrentPosition()方法用于定位媒体的位置

媒体播放完毕,处于playBackCompleted状态

如果循环模式被选中,那么媒体播放完毕会继续处于started状态

调用start()方法使它从头开始播放
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mediaplayer 对象