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对象拥有以下几种状态:
当一个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()方法使它从头开始播放
相关文章推荐
- Python动态类型的学习---引用的理解
- 土人系列AS入门教程 -- 对象篇
- C#托管堆对象实例包含内容分析
- C#实现获取不同对象中名称相同属性的方法
- javascript asp教程第十一课--Application 对象
- PowerShell中使用Out-String命令把对象转换成字符串输出的例子
- VBS教程:对象-正则表达式(RegExp)对象
- C#检查指定对象是否存在于ArrayList集合中的方法
- sql2008启动代理未将对象应用到实例解决方案
- C#编程自学之类和对象
- C++中对象的常引用、动态建立和释放相关知识讲解
- php中将一个对象保存到Session中的方法
- php对象和数组相互转换的方法
- PHP中把对象转换为关联数组代码分享
- C#写入对象或集合类型数据到xml文件的方法
- C#利用反射来判断对象是否包含某个属性的实现方法
- ASP.NET中使用Application对象实现简单在线人数统计功能
- asp提示Server 对象 错误 ASP 0178 : 80070005
- Javascript 对象的解释
- JavaScript对象、属性、事件手册集合方便查询