之前因为要完成网易微专业的 IO 部分考试,所以需要完成一个音乐播放器,所以翻阅了官方文档,官方文档中很全面的写出了 Mediaplayer 使用以及注意事项,尤其是它各种状态间的切换都写的很详细。
那么下面就我从文档中学到一些内容分享给大家,当然配合官方的这种张状态图应该更容易理解:
刚 new 出来的 Mediaplayer 或者调用 reset() 方法后,Mediaplayer 就会进入到了空闲状态,而只有空闲状态调用 setDataSource() 才不会报错。
当 Mediaplayer 使用完成后,记得及时调用 release(),从而使得 Mediaplayer 进入结束状态。
在空闲状态与结束状态之间才是 Mediaplayer 的生命周期。
使用 new 创建 Mediaplayer 处于空闲状态,而使用 create() 创建的 Mediaplayer 处于 Prepared 状态。
一旦发生错误,Mediaplayer 会进入错误状态(Error)。
为了从 Error 中恢复,Mediaplayer 可调用 reset() 恢复到空闲。
IllegalStateException 是因为调用 setDataSource() 处于无效状态,在任何飞空闲状态调用这个方法,都是会报错的。
调用 setDataSource(),Mediaplayer 状态由空闲变为初始化。
Mediaplayer 想要播放,必须想进入准备状态。
使用两种方法可以进入准备状态,一是 prepare() 当然这是同步的准备方法,可能会堵塞主线程,而是 prepareAsync() 这个方法是异步的,当然这个要配合 OnPrepareListener 回调,从而在异步准备完成后去做其他事情,比如播放音乐等等。
在任何非初始化状态中调用上面两个准备方法都会报错。
准备状态下可以做一些准备工作,比如调节音量等等。
调用 start() 后,Mediaplayer 进入 Started 状态。
调用 pause() 后,Mediaplayer 进入 Paused 状态。
Started 进入 Paused 状态转换是异步进行的。
调用 stop() 进入 Stopped 状态。
一旦进入定制状态需要再次调用 prepare() / prepareAsync(),将 Mediaplayer 重新设置为准备状态。