MusicPlayer加载网络音频需要注意的事情
2016-06-16 11:16
281 查看
与加载本地音频不同,加载网络音频需要调用到prepareASync()方法,用于异步加载音频数据。
因此,在使用异步加载时,需要加上onPreparedListener的监听事件。
当onPrepared()被调用时,说明音频的加载完成,可以进行播放。所以常规做法都是在onPrepared()中调用start()方法播放。
这里要注意的是:
1、MediaPlayer的加载超时时间是无法自己设定的,所以要加上onErrorListener,利用TIME_OUT字段判断是否超时,同时因为网络加载会出现很多不同的异常(比如服务器异常、文件异常、网络异常等等)导致加载失败,无法播放音频,所以需要在onError()中针对异常作处理。
2、放任MediaPlayer在主线程中操作很容易导致ANR的出现,而最主要的问题是因为异步加载导致其他操作都会等其onPrepared之后才能继续响应(比如在调用preparedASync()之后立刻stop()、reset()、release()之类的)。所以(1):用Service处理;(2):在Service中还要独立开线程处理
3、由于异步加载导致的部分异常。比如应用关闭了,MediaPlayer突然开始播放,或者在不该播放的地方又控制不住地播放起来。最主要还是prepareAsync()惹的祸,所以(1):确保在不需要调用MediaPlayer时,不会因为后台的网络链接或其他逻辑调用到MediaPlayer,不要在调用了之后再判断是否要关闭MediaPlayer然后再去关闭,这种情况往往特别不靠谱;(2):在onPrepared()中加上相应的判断,不需要播放时直接调用stop()/release()等方法,不轻易调用start()。
其实其他需要异步加载的东西,要注意的点和上面所说的大同小异(比如视频)。
因此,在使用异步加载时,需要加上onPreparedListener的监听事件。
当onPrepared()被调用时,说明音频的加载完成,可以进行播放。所以常规做法都是在onPrepared()中调用start()方法播放。
这里要注意的是:
1、MediaPlayer的加载超时时间是无法自己设定的,所以要加上onErrorListener,利用TIME_OUT字段判断是否超时,同时因为网络加载会出现很多不同的异常(比如服务器异常、文件异常、网络异常等等)导致加载失败,无法播放音频,所以需要在onError()中针对异常作处理。
2、放任MediaPlayer在主线程中操作很容易导致ANR的出现,而最主要的问题是因为异步加载导致其他操作都会等其onPrepared之后才能继续响应(比如在调用preparedASync()之后立刻stop()、reset()、release()之类的)。所以(1):用Service处理;(2):在Service中还要独立开线程处理
3、由于异步加载导致的部分异常。比如应用关闭了,MediaPlayer突然开始播放,或者在不该播放的地方又控制不住地播放起来。最主要还是prepareAsync()惹的祸,所以(1):确保在不需要调用MediaPlayer时,不会因为后台的网络链接或其他逻辑调用到MediaPlayer,不要在调用了之后再判断是否要关闭MediaPlayer然后再去关闭,这种情况往往特别不靠谱;(2):在onPrepared()中加上相应的判断,不需要播放时直接调用stop()/release()等方法,不轻易调用start()。
其实其他需要异步加载的东西,要注意的点和上面所说的大同小异(比如视频)。
相关文章推荐
- 在http请求中,get不都是从服务器上down数据下来吗?
- 常用的负载均衡软件详解
- Nginx php https 400 Bad Request
- android httpClient 支持HTTPS的2种处理方式
- CURL使用HTTPS的技术小结
- jetty https服务器实现
- http改用https资料
- http://www.csdn.net/article/2013-05-27/2815444-5-html5-features-you-must-know
- CSS控制前端图片HTTP请求的各种情况示例
- curl+个人证书(又叫客户端证书)访问https站点
- Linux服务器上监控网络带宽的18个常用命令
- HTTP协议
- HTTP协议的头信息详解
- HTTP协议详解(真的很经典)
- 网络号与子网号区别
- 转: android studio 消除SDK更新时的“https://dl-ssl.google.com refused”错误
- HTTP协议详解
- micro httpd问题
- HTTP Header 入门详解
- SAP PS 模块,项目、WBS与网络作业概念