MediaPlayer之生命周期解析
来源:互联网 发布:淘宝店铺月度运营计划 编辑:程序博客网 时间:2024/05/29 09:25
(1)Idle:当new构造噐或者调用reset方法之后,MediaPlayer进入Idle状态。这两种方法不同之处在于,new进入的Idle状态在调用除setDataSource()以外的方法时状态不改变,而reset()会回调OnErrorListener.onError()方法,并且进入Error状态。(所以官网上Valid and invalid states表格中Valid states下的Idle其实是指由new进入的Idle状态)。另外,由create方法创建对象进入的不是Idle状态,而是Prepared状态。
(2)End:当MediaPlayer不再使用时,建议调用release()马上释放其占用的资源。调用release()之后进入End状态,此时,MediaPlayer已无效,不能回退到任何其他状态。
(3)Error:当出现方法调用或编程错误时,OnErrorListener.onError()被调用,并且进入Error状态,所以总是建议注册OnErrorListener。事实上,即使没有注册OnErrorListener,当错误发生时也会进入Error状态。另外,方法调用错误还会抛出IllegaStateException.
(4)Initalized:调用setDataSource()系列重载方法进入 Initalized状态,任何其他状态调用这些方法将抛出异常
(5)Preparing和Prepared:在MediaPlayer启动播放(start)之前必须先进入Prepared状态。prepare()调用结束直接进入Prepared状态,一般来说prepared过程会需要很长一段事件,如果这个工作发生在UI线程,则会很容易产生ANR。所以应该开辟另外一个线程进行这些准备工作。而调用prepareAsync()先进入Preparing状态,Preparing是一个暂时状态,进行一些准备工作,之后才会进入Prepared状态。prepareAsync中的准备工作是在后台执行的,所以比prepare()更加方便。进入Preapred状态会回调OnPreparedListener.onPrepared()方法。注意在Preparing状态调用任何方法的后果是不可预见的。其他状态下调用 prepare()或prepareAsync()会抛出异常。在Prepared状态下,就可以进行一些set属性操作了。
(6)Started:调用start()进入Started状态,回调onBufferingUpdateListener.onBufferingUpdate().此时调用isPlayer()返回true。
(7)Paused:调用pause()进入Paused()状态。Started和Paused之间的状态转换是异步的,所以在isPlaying()之前会需要更新时间。此时调用start()可以返回start状态。
(8)Stoped:调用stop进入Stoped状态.如果想再进入start状态,之前先调用prepared()或prepareAsync()进入prepared状态
另外:
在 Prepared、Started、 Paused、 PlayBackConpleted都能调用异步的seekTo(),此方法马上返回,但是实际会花费一些时间去完成操作,当这些操作完成,回调onSeekCompleteListener.onSeekComplete()。实际的播放位置还能通过getCurrentposition()来获得。
详解内容参考谷官网:http://developer.android.com/reference/android/media/MediaPlayer.html
- MediaPlayer之生命周期解析
- Adroid开发之MediaPlayer生命周期
- Android之 MediaPlayer (1) 生命周期
- MediaPlayer 生命周期
- MediaPlayer生命周期
- mediaplayer生命周期
- Android MediaPlayer的生命周期
- Android MediaPlayer的生命周期
- Android MediaPlayer的生命周期
- Android MediaPlayer的生命周期
- MediaPlayer的生命周期
- Android MediaPlayer的生命周期
- Android MediaPlayer的生命周期
- Android MediaPlayer 生命周期
- android Mediaplayer生命周期
- MediaPlayer的生命周期
- Android MediaPlayer生命周期详解
- Android MediaPlayer的生命周期
- ubuntu 启动修复
- Oracle收集索引统计信息
- 循环语句求1-10的和--循环
- linux mint 修复亮度无法调节的问题(linux mint 16)
- 北京的软件公司分布
- MediaPlayer之生命周期解析
- 阅读笔记——核密度估计
- spring+springMVC+spring data jpa+jquery+bootstrap
- 1177C语言实验——时间间隔
- Merge Sorted Array
- 把数字转化为星期--多重选择
- php的扩展和嵌入--php内部变量
- codeforce 342E 树链剖分 || 分块
- iOS后台定位实现