MusicPlayer加载网络音频需要注意的事情

与加载本地音频不同,加载网络音频需要调用到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()。


其实其他需要异步加载的东西,要注意的点和上面所说的大同小异(比如视频)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值