Adroid开发之MediaPlayer生命周期

MediaPlayer状态图
mediaplayer_state_diagram

通过上图,我们可以看出一个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()方法使它从头开始播放
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值