安卓mediaplayer(1)

当MediaPlayer对象刚刚使用new创建或在reset()被调用后,它处于空闲状态;并且在release()被调用之后,它处于结束状态。在这两个状态之间是MediaPlayer对象的生命周期。


在调用reset()之后,新构建的MediaPlayer对象与MediaPlayer对象之间有一个微妙但重要的区别。调用getCurrentPosition(),getDuration(),getVideoHeight(),getVideoWidth(),setAudioStreamType(int),setLooping(boolean),setVolume(float,float),pause(),start() ,stop(),seekTo(int),prepare()或prepareAsync()在空闲状态为两种情况。如果在构建MediaPlayer对象之后立即调用这些方法中的任何一种,则用户提供的回调方法OnErrorListener.onError()不会被内部播放器引擎调用,并且对象状态保持不变;但是如果这些方法在reset()之后调用,则用户提供的回调方法OnErrorListener.onError()将被内部播放器引擎调用,并且对象将被转移到Error状态。


还建议一旦MediaPlayer对象不再被使用,请立即调用release(),以便可以立即释放与MediaPlayer对象关联的内部播放器引擎使用的资源。资源可能包括单例资源,例如硬件加速组件和调用释放失败()可能导致MediaPlayer对象的后续实例落后于软件实现或完全失败。 MediaPlayer对象处于“结束”状态后,将无法再使用,无法将其恢复到任何其他状态。


此外,使用new创建的MediaPlayer对象处于空闲状态,而使用重载的方便创建方法之一创建的对象不处于空闲状态。实际上,如果使用create方法创建成功,则对象处于Prepared状态。


通常,由于各种原因,诸如不支持的音频/视频格式,交错音频/视频不足,分辨率过高,流超时等,一些播放控制操作可能会失败。因此,在这种情况下,错误报告和恢复是一个重要的问题。有时由于编程错误,也可能发生无效状态的回放控制动作。在所有这些错误条件下,如果已经通过setOnErrorListener(android.media.MediaPlayer.OnErrorListener)事先注册了OnErrorListener,则内部播放器引擎将调用用户提供的OnErrorListener.onError()方法。

重要的是要注意,一旦发生错误,MediaPlayer对象就会进入错误状态(除了上述内容),即使应用程序尚未注册错误侦听器。


为了重新使用处于Error状态并从错误中恢复的MediaPlayer对象,可以调用reset()来将对象恢复到其空闲状态。


这是一个很好的编程实践,让你的应用程序注册一个OnErrorListener来寻找内部播放器引擎的错误通知。


抛出IlleglStateException以防止编程错误,例如调用prepare(),prepareAsync()或其中一个重载的setDataSource方法处于无效状态。


调用setDataSource(FileDescriptor)或setDataSource(String)或setDataSource(Context,Uri)或setDataSource(FileDescriptor,long,long)将处于空闲状态的MediaPlayer对象传送到Initialized状态。


如果在任何其他状态下调用setDataSource(),都会抛出IllegalStateException异常。


总是注意可能从重载的setDataSource方法抛出的IllegalArgumentException和IOException是一个很好的编程实践。


MediaPlayer对象必须首先进入“准备”状态,才能开始播放。
发布了28 篇原创文章 · 获赞 49 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qwe25878/article/details/76053043